You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security 5.x OAuth2如何替换JSESSIONID使用Token完成身份认证

结论

大部分场景仅通过调整配置即可实现需求,仅少数自定义Token解析场景需要编写少量扩展代码。

问题根因

你当前的Spring Security配置默认启用了基于Session的认证上下文持久化逻辑,没有加载OAuth2 Bearer Token的解析处理链,因此只有携带JSESSIONID时才能从Session中恢复SecurityContext,请求携带Bearer Token时没有对应处理器解析并填充认证上下文。

具体实现步骤

1. 引入必要依赖

如果你的服务作为OAuth2资源服务器对外提供接口,首先引入对应依赖:

  • Spring Boot项目引入起步依赖:spring-boot-starter-oauth2-resource-server
  • 纯Spring项目引入:spring-security-oauth2-resource-server + spring-security-oauth2-jose

2. 调整Security核心配置

修改SecurityFilterChain配置,开启Bearer Token解析,同时关闭Session生成与使用:

import org.springframework.security.config.http.SessionCreationPolicy;
import static org.springframework.security.config.Customizer.withDefaults;

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        // 前后端分离Token认证场景无需CSRF防护
        .csrf(csrf -> csrf.disable())
        // 配置Session策略为无状态,完全不生成、不使用JSESSIONID
        .sessionManagement(session -> 
            session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        )
        // 开启OAuth2资源服务器配置,默认启用JWT格式Token解析
        .oauth2ResourceServer(oauth2 -> oauth2.jwt(withDefaults()))
        // 原有接口权限规则配置保持不变即可
        .authorizeHttpRequests(auth -> auth
            .anyRequest().authenticated()
        );
    return http.build();
}

补充配置文件(以Spring Boot YAML为例),指定JWT签发方校验地址:

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: 你的授权服务器签发地址(与JWT payload中iss字段一致)

需要编写自定义代码的场景

只有以下特殊场景需要补充少量扩展代码,无需修改核心流程:

  • 你使用的是不透明Token(Opaque Token)而非JWT,需要自定义Token内省逻辑
  • 需要自定义Token权限映射规则,需实现JwtAuthenticationConverter接口注入到配置中
  • 服务同时需要支持授权码模式前端跳转登录和接口Bearer Token认证,需要配置多条独立的SecurityFilterChain分别处理两类请求
验证规则

配置完成后重启服务,请求时在请求头携带Authorization: Bearer {实际access_token值}即可正常填充SecurityContext,服务端不会再返回JSESSIONID Cookie。


内容的提问来源于stack exchange,提问作者Alexander Sels

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:51:00