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

在Spring Security OAuth2授权服务中传递自定义Header至/oauth2/token API

解决Spring OAuth2中从请求头传递user-id到JWT Access Token的问题

实现步骤

1. 获取请求头中的user-id

在新版Spring OAuth2授权服务中,可通过RequestContextHolder获取当前请求的HttpServletRequest,进而读取请求头里的user-id。

2. 修改JwtTokenCustomizer动态添加Claims

在你已有的配置类中,补充动态获取请求头并设置自定义Claim的逻辑:

@Configuration
public class JwtTokenCustomizerConfig {

    @Bean
    public OAuth2TokenCustomizer<JwtEncodingContext> tokenCustomizer() {
        return (context) -> {
            if (OAuth2TokenType.ACCESS_TOKEN.equals(context.getTokenType())) {
                // 获取当前请求对象
                HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
                // 从请求头读取user-id
                String userId = request.getHeader("user-id");
                
                // 非空校验,避免空值写入Token
                if (userId != null && !userId.isEmpty()) {
                    context.getClaims().claims((claims) -> {
                        claims.put("userId", userId);
                    });
                }
            }
        };
    }
}

3. 调用验证

客户端调用/oauth2/token接口时,在请求头中携带user-id: 目标值,生成的Access Token就会包含userId这个自定义Claim。

关键说明

  • RequestContextHolder是Spring提供的请求上下文工具类,可直接获取当前请求实例,替代旧版废弃的HeaderMapRequestWrapper。
  • 空值处理:添加非空判断能避免请求头缺失user-id时的异常,也可根据业务需求添加默认值或抛出校验异常。
  • 适配新版库:该方案适配Spring Authorization Server(新OAuth2授权服务库),替代旧版的JwtAccessTokenConverter.enhance()逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:12:56