Spring Security + JWT

一、整体架构

Client → /login → 颁发 access + refresh
Client → 业务接口(带 access)→ 网关解析 → 业务
Client → /token/refresh(带 refresh)→ 颁发新 access

二、过滤器链

@Bean
SecurityFilterChain chain(HttpSecurity http) throws Exception {
  return http
    .csrf(c -> c.disable())
    .sessionManagement(s -> s.sessionCreationPolicy(STATELESS))
    .authorizeHttpRequests(a -> a
        .requestMatchers("/auth/**").permitAll()
        .anyRequest().authenticated())
    .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class)
    .build();
}

三、单设备登录

Redis 存 user:token:{uid} → 当前 access 的 jti,新登录覆盖旧值;JwtFilter 校验 jti 一致性。

四、踢人、强制下线

后台接口删除 user:token:{uid} 即可,下次请求自然失败。