Spring Boot集成Spring Security只需三步:加依赖、写配置、定义用户规则;引入starter依赖后默认保护所有接口,通过SecurityFilterChain函数式配置路径放行与登录登出,密码须加密存储并区分认证授权逻辑。

Spring Boot 集成 Spring Security 很简单,核心就三步:加依赖、写配置、定义用户规则。不需要从头写过滤器或拦截器,框架自动帮你搭好安全骨架。
添加 starter 依赖
在 pom.xml 中引入:
-
spring-boot-starter-security(必需) -
spring-boot-starter-web(提供 Web 支持) - 如需自定义登录页,再加
spring-boot-starter-thymeleaf
引入后启动项目,所有接口默认受保护,访问任意路径会自动跳转到内置登录页,用户名为 user,密码是控制台打印的随机字符串(例如:Using generated security password: a1b2c3-d4e5...)。
配置 SecurityFilterChain
Spring Boot 3 推荐使用函数式配置,不再继承 WebSecurityConfigurerAdapter。新建配置类,返回一个 SecurityFilterChain Bean:
- 用
HttpSecurity设置哪些路径放行(如/login、/css/**)、哪些需要认证(如/**) - 启用表单登录(
formLogin()),可指定登录页 URL 和成功跳转地址 - 配置登出行为(
logout()),支持清除会话、失效 Cookie - 关闭 CSRF(仅限前后端分离项目,如用 JWT);保留开启(传统页面提交需防护)
定义用户与密码规则
不能明文存密码,必须加密。推荐方式:
- 内存中快速测试:用
User.withDefaultPasswordEncoder()(仅开发) - 生产环境:注入
BCryptPasswordEncoder,搭配UserDetailsService从数据库加载用户 - 自定义
UserDetailsService实现类,重写loadUserByUsername,查库并封装为UserDetails
密码字段必须经 BCryptPasswordEncoder.encode() 加密后存入,验证时框架自动比对哈希值。
区分认证和授权逻辑
登录只是第一步,后续还要控制“谁能访问什么”:
- URL 级授权:在
authorizeHttpRequests()中按路径配置权限,比如requestMatchers("/admin/**").hasRole("ADMIN") - 方法级授权:加
@EnableMethodSecurity,在 Service 方法上用@PreAuthorize("hasAuthority('user:delete')") - 角色(ROLE_ADMIN)和权限(user:read)不要混用,建议统一用权限字符串,更灵活
所有权限判断都基于 SecurityContext 中的 Authentication 对象,业务代码里不用手动取 session 或 ThreadLocal。


















