Spring Security

sunjk 发布于 2026-01-13 161 次阅读


引入


Spring Security 常用于身份验证、授权、安全上下文

  • 身份验证 (Authentication): 验证用户的身份(例如,用户名/密码)。
  • 授权 (Authorization): 确定用户是否有权限访问特定资源。
  • 安全上下文 (Security Context): 存储已认证用户的详细信息,应用程序中可以访问。

Spring Security 的整体原理为:

  1. 当 http 请求进来时,使用 severlet 的 Filter 进行拦截
  2. 提取 http 中请求的认证信息,如 username 和 password ,或者 Token
  3. 比对验证,相同则认证成功,反之失败

准备工作


引入依赖

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

默认实现


一个请求过来 Spring Security 的处理过程(调用链)如下所示:

  • Filter:拦截Http请求,获取认证信息
  • AuthenticationManager:从 Filter 中获取认证信息,然后查找合适的 AuthenticationProvider 来发起认证流程
  • AuthenticationProvider:调用 UserDetailsService 来查询用户信息并与从 http 请求中获取的认证信息进行比对
  • UserDetailsService:负责获取用户保存的认证信息

使用 Token 认证方案


在实际生产环境中,一般结合 Token 来做认证

用户认证流程

用户登录

  • 前端:
    • 用户在登录界面输入用户名和密码。
    • 前端将这些凭证以 JSON 格式发送到后端的登录 API(例如 POST /api/login)。
  • 后端:
    • Spring Security 接收请求,使用 AuthenticationManager 进行身份验证。
    • 如果认证成功,后端生成一个 JWT(JSON Web Token)或其他认证令牌,并将其返回给前端。

使用 JWT 进行用户认证

  • 前端收到 JWT 后,可以将其存储在 localStorage 或 sessionStorage 中,以便后续请求使用。
  • 在发送需要认证的请求时,前端将 JWT 添加到请求头中,如:
fetch('/api/protected-endpoint', {
    method: 'GET',
    headers: {
        'Authorization': `Bearer ${token}`
    }
});
  • 后端解析 JWT:Spring Security 通过过滤器来解析和验证 JWT。可以自定义一个 OncePerRequestFilter 以拦截请求,提取 JWT,并验证其有效性。

退出登录

由于 JWT 是无状态的,后端不需要记录会话状态。用户可以通过前端操作(例如,删除存储的 JWT)来“退出登录”。可以实现一个注销接口,用于前端执行相关逻辑。

References

spring security 超详细使用教程(接入springboot、前后端分离)
秒懂SpringBoot之全网最易懂的Spring Security教程

此作者没有提供个人介绍。
最后更新于 2026-01-13