625 字
约 2 分钟
1
Spring Security 整合 JWT : 实现接口鉴权
Spring Security 整合 JWT : 实现接口鉴权
在现代的 Web 应用中,接口鉴权是一个重要的安全考虑因素。通过接口鉴权,您可以确保只有经过身份验证和授权的用户能够访问特定的接口和资源。
上小节中,我们通过 Spring Security + JWT 已经实现了用户认证功能,当用户名、密码正确时,返回 Token 令牌,否则提示错误信息。本小节,我们将在后端程序中拿到的 Token 令牌,对接口进行鉴权,若令牌正确,则可正常访问接口资源,否则提示对应错误提示。
JWT 完整流程
JWT 的完整流程如下:
graph LR
A[用户提交登录请求] -->|POST /users/login| B{用户名密码验证}
B -->|成功| C[生成 JWT Token]
C -->|返回 Token| D[浏览器存储 Token]
D -->|后续请求携带 Token| E[Server 校验签名]
E -->|有效| F[获取用户信息并处理请求]
E -->|无效| G[返回错误提示]
JWT 流程解释
JWT 完整流程如下:
- 用户使用账号和密码发起 POST 请求,也就是上小节完成的登录认证接口;
- 服务器使用私钥创建一个 Token 令牌;
- 令牌返回给浏览器,前端存储 Token;
- 前端后续请求携带 Token 访问接口;
- 后端校验 Token 签名是否有效,获取用户信息并校验权限;
- 返回接口数据。
令牌鉴权实现
在 Spring Security 集成 JWT 的场景下,后端接口鉴权主要通过以下方式实现:
// JwtAuthenticationFilter 或 Security 拦截器
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
String token = extractTokenFromRequest(request);
if (token != null) {
try {
// 解析 Token
Jws<Claims> claims = jwtTokenHelper.parseToken(token);
// 设置认证信息到 SecurityContext
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(
claims.getBody().getSubject(), null, null));
} catch (Exception e) {
// Token 无效
SecurityContextHolder.clearContext();
}
}
chain.doFilter(request, response);
}
}
知识点总结
- JWT 令牌必须在 HTTP 请求头中携带,格式为
Authorization: Bearer <token> - 后端接口需要验证 JWT 签名,防止伪造攻击
- 推荐使用
SecurityContextHolder或自定义过滤器进行鉴权 - Token 有效期建议设置为 1 小时,搭配刷新机制
- 生产环境建议使用 HTTPS + 合理的密钥长度
本文由 Clarity 学习台 AI 助手生成
Spring Security 整合 JWT : 实现接口鉴权
http://clxhxhhr.top/posts/355/ 评论
0 条
还没有评论,先写一条吧。