Spring Boot接口鉴权实战:JWT令牌认证与Spring Security过滤器链配置

Spring Boot接口鉴权为什么选JWT方案

Spring Boot后端开发里,接口鉴权最常用的方案是JWT(JSON Web Token)。JWT把用户身份与权限信息签进一个自包含令牌,服务端不需要会话存储,非常适合无状态、水平扩容的微服务架构。相比Session方案,JWT天然支持跨域、移动端、网关转发,缺点是签发后无法主动吊销,需要配合有效期和刷新机制弥补。

Spring Security认证过滤器链配置与JWT校验流程

核心流程:客户端登录成功后拿到access_token,后续请求在Authorization头带Bearer token,服务端过滤器拦截解析、验签、塞进SecurityContext,放行到接口。

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .csrf(csrf -> csrf.disable())
            .sessionManagement(s -> s.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/auth/login", "/auth/refresh").permitAll()
                .requestMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated())
            .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class);
        return http.build();
    }
}

jwtAuthFilter解析Authorization头:无头放行,有头则调JwtService解析,解析成功把用户信息封装为Authentication放进SecurityContextHolder,接口里用@AuthenticationPrincipal或SecurityContext取用户。

JWT刷新令牌机制与AccessToken过期的处理

access_token设短有效期(如15-30分钟),refresh_token设长有效期(如7天),refresh_token只走单独的刷新接口且存入服务端(Redis)以便吊销。刷新流程:

// 刷新令牌核心逻辑(简化)
public TokenPair refresh(String refreshToken) {
    // 1. 解析并校验 refresh_token 签名与过期
    // 2. 校验 Redis 中存在该 token(未被吊销)
    // 3. 签发新的 access_token 和 refresh_token
    // 4. 旧 refresh_token 删除,新的写入 Redis
}

客户端401时自动调刷新接口拿新令牌重放原请求,避免用户被迫重新登录。安全注意:refresh_token必须和客户端绑定(存指纹),防泄漏被滥用。

JWT密钥管理与令牌吊销方案

签名密钥用RS256非对称加密更稳妥,私钥放服务端配置,公钥给网关/其他服务验签。吊销场景用Redis存blacklist:令牌验签通过后再查黑名单,黑名单命中则拒绝。用户改密码、被踢下线、风控封禁时写入黑名单。短token过期快,黑名单数据量大,可以只对剩余有效期长的token做吊销记录。

Spring Boot接口鉴权常见问题排查

常见问题:过滤器放行后接口仍被拦截(授权配置顺序写错);JWT过期时间用秒还是毫秒单位搞混导致立刻失效(jjwt要求Date);SecurityContext里塞的不是Authentication而是自定义对象导致拦截器取不到用户。调试优先看过滤器执行顺序(日志级别开DEBUG),确认自定义Filter确实注册进去了,再检查JWT解析异常被吞掉的情况——注意捕获ExpiredJwtException单独抛401,SignatureException单独抛401,不要统一返回500。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/springboot-jie-kou-jian-quan-shi-zhan-jwt-ling-pai-ren/

(0)
小编小编
上一篇 5小时前
下一篇 5小时前

相关推荐