Springboot应用开发-SpringBootSecurity

本文涉及的产品
云原生网关 MSE Higress,422元/月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Spring Boot Security 是 Spring 提供的安全框架,集成了身份认证和授权功能,帮助开发者快速构建安全的应用程序。本篇博客将从功能介绍到配置和实践,带您全面了解 Spring Boot Security。

Spring Boot Security 是 Spring 提供的安全框架,集成了身份认证和授权功能,帮助开发者快速构建安全的应用程序。本篇博客将从功能介绍到配置和实践,带您全面了解 Spring Boot Security。


Spring Boot Security 的主要功能

功能 描述
身份认证 验证用户身份,确保用户合法
授权控制 管理用户权限,限制对资源的访问
防御攻击 保护应用免受 CSRF、XSS 等常见攻击
会话管理 提供用户会话超时和并发登录限制功能

快速上手

添加依赖

在 Maven 项目的 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

对于 Gradle 项目:

implementation 'org.springframework.boot:spring-boot-starter-security'

注意:默认情况下,Spring Boot Security 会保护所有端点。

默认行为

引入依赖后,应用程序会启用以下默认安全行为:

  • 默认登录表单

  • 默认用户名user

  • 随机生成密码:启动时可在控制台日志中找到。

例如:

Using generated security password: 3e7b18a3-b46b-4d7a-a77d-4e7d13a57e0d

核心概念与配置

配置自定义用户名和密码

通过修改 application.properties 文件:

spring.security.user.name=admin
spring.security.user.password=secret

URL 授权规则

使用 Java 配置自定义安全规则:

@Configuration
public class SecurityConfig {
   

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
   
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll() // 允许访问公开资源
                .anyRequest().authenticated()          // 其他请求需要认证
            .and()
            .formLogin();                              // 启用表单登录
        return http.build();
    }
}

方法级别授权

通过注解实现对特定方法的访问控制:

@RestController
public class UserController {
   

    @GetMapping("/admin")
    @PreAuthorize("hasRole('ADMIN')")
    public String adminAccess() {
   
        return "Welcome, Admin!";
    }

    @GetMapping("/user")
    @PreAuthorize("hasRole('USER')")
    public String userAccess() {
   
        return "Welcome, User!";
    }
}

提示:确保启用了方法级别的安全控制:

@EnableGlobalMethodSecurity(prePostEnabled = true)

自定义用户数据

使用内存存储用户

通过 InMemoryUserDetailsManager 配置用户:

@Bean
public UserDetailsService userDetailsService() {
   
    UserDetails user = User.builder()
        .username("user")
        .password("password")
        .roles("USER")
        .build();

    UserDetails admin = User.builder()
        .username("admin")
        .password("password")
        .roles("ADMIN")
        .build();

    return new InMemoryUserDetailsManager(user, admin);
}

使用数据库存储用户

定义用户实体类:

@Entity
public class User {
   

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String password;
    private String role;

    // Getters and Setters
}

实现 UserDetailsService

@Service
public class CustomUserDetailsService implements UserDetailsService {
   

    private final UserRepository userRepository;

    public CustomUserDetailsService(UserRepository userRepository) {
   
        this.userRepository = userRepository;
    }

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
   
        User user = userRepository.findByUsername(username)
            .orElseThrow(() -> new UsernameNotFoundException("User not found"));

        return org.springframework.security.core.userdetails.User.builder()
            .username(user.getUsername())
            .password(user.getPassword())
            .roles(user.getRole())
            .build();
    }
}

防御常见安全攻击

攻击类型 Spring Security 防护措施
CSRF 默认启用,阻止跨站请求伪造
XSS 对输入数据进行编码,防止脚本注入
Session Fixation 在会话重新验证时提供新会话 ID
HTTPS 强制 配置安全通道,保护敏感数据传输

示例:禁用 CSRF(仅在需要时慎用)

http.csrf().disable();

总结

Spring Boot Security 提供了强大且灵活的安全功能,无论是简单的身份认证还是复杂的授权场景,都能轻松实现。通过多样的配置方式和工具支持,开发者可以快速构建安全可靠的应用程序。

推荐阅读Spring Security 官方文档

感谢关注点赞收藏!
在这里插入图片描述

目录
相关文章
|
存储 安全 Java
SpringBoot搭建Spring Security 入门
SpringBoot搭建Spring Security 入门
456 0
|
11月前
|
JSON 安全 Java
什么是JWT?如何使用Spring Boot Security实现它?
什么是JWT?如何使用Spring Boot Security实现它?
1954 5
|
7月前
|
监控 安全 Java
解决 Spring Boot 中 SecurityConfig 循环依赖问题的详解
本文详细解析了在 Spring Boot 中配置 `SecurityConfig` 时可能遇到的循环依赖问题。通过分析错误日志与代码,指出问题根源在于 `SecurityConfig` 类中不当的依赖注入方式。文章提供了多种解决方案:移除 `configureGlobal` 方法、定义 `DaoAuthenticationProvider` Bean、使用构造函数注入以及分离配置类等。此外,还讨论了 `@Lazy` 注解和允许循环引用的临时手段,并强调重构以避免循环依赖的重要性。通过合理设计 Bean 依赖关系,可确保应用稳定启动并提升代码可维护性。
619 0
|
4月前
|
监控 安全 NoSQL
【SpringBoot】OAuth 2.0 授权码模式 + JWT 令牌自动续签 的终极落地指南,包含 深度技术细节、生产环境配置、安全加固方案 和 全链路监控
【SpringBoot】OAuth 2.0 授权码模式 + JWT 令牌自动续签 的终极落地指南,包含 深度技术细节、生产环境配置、安全加固方案 和 全链路监控
1875 1
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
450 0
|
10月前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
5094 13
Spring Boot 3 集成 Spring Security + JWT
|
7月前
|
存储 安全 Java
Spring Security 入门与详解
Spring Security 是 Spring 框架中的核心安全模块,提供认证、授权及防护功能。本文详解其核心概念,包括认证(Authentication)、授权(Authorization)和过滤器链(Security Filter Chain)。同时,通过代码示例介绍基本配置,如 PasswordEncoder、UserDetailsService 和自定义登录页面等。最后总结常见问题与解决方法,助你快速掌握 Spring Security 的使用与优化。
1743 0
|
搜索推荐 Java 开发者
org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 问题处理
【5月更文挑战第14天】org.springframework.context.ApplicationContextException: Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException 问题处理
5103 1