Spring Boot集成Spring Security需三步:加spring-boot-starter-security依赖启用默认保护;通过SecurityFilterChain(3.x)或WebSecurityConfigurerAdapter(2.x)配置路径放行、角色限制与表单登录;实现UserDetailsService和BCryptPasswordEncoder以支持数据库用户与密码加密校验。

在 Spring Boot 中集成 Spring Security 实现安全认证与鉴权,核心是三件事:加依赖、写配置、管用户。不需要从头造轮子,Spring Boot 的自动配置让基础安全能力开箱即用,而真正关键的是按需定制认证逻辑和权限规则。
添加 starter 依赖就启用默认保护
只需在 pom.xml 中引入 spring-boot-starter-security:
- 项目启动后,所有 HTTP 接口自动受保护,未登录访问会重定向到
/login页面 - 框架自动生成一个默认用户:
username = "user",密码是控制台日志中打印的一次性 UUID(每次重启都变) - 这说明 Security 已生效,但仅适用于演示;真实项目必须替换为自己的用户体系
自定义 Security 配置类控制放行与拦截
继承 WebSecurityConfigurerAdapter(Spring Boot 2.x)或实现 SecurityFilterChain(Spring Boot 3.x+),声明哪些路径可公开、哪些需登录、哪些要特定权限:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 允许匿名访问静态资源或登录页:
.requestMatchers("/login", "/css/**", "/js/**").permitAll() - 限制后台接口仅管理员可访问:
.requestMatchers("/admin/**").hasRole("ADMIN") - 要求所有其他请求必须已认证:
.anyRequest().authenticated() - 启用表单登录并指定自定义登录页:
.formLogin().loginPage("/login").permitAll()
提供真实用户数据与密码加密逻辑
默认用户不能用于生产。需实现 UserDetailsService 接口,从数据库等来源加载用户信息,并配合 PasswordEncoder 校验密码:
立即学习“Java免费学习笔记(深入)”;
- 重写
loadUserByUsername(String username),返回封装了用户名、密码、角色列表的UserDetails对象 - 密码必须加密存储,推荐使用
BCryptPasswordEncoder,它能安全处理盐值和哈希 - 注册该密码编码器为 Bean,确保认证时自动调用它比对密码(而非明文比较)
按角色或权限粒度控制接口访问
授权不只是“登录才能看”,而是精确到“谁能在什么条件下做什么”:
- URL 级:在
SecurityFilterChain中用hasRole("USER")或hasAuthority("DELETE_USER") - 方法级:在 Service 层方法上加
@PreAuthorize("hasRole('ADMIN')"),需开启方法安全:@EnableMethodSecurity - 表达式支持:比如
@PreAuthorize("#userId == authentication.principal.id or hasRole('ADMIN')")实现数据级权限判断

















