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

如何在Spring Security中结合JWTProcessor与自定义JWK缓存TTL?

如何同时配置JWK缓存和自定义JWTProcessor

要同时实现JWK缓存(覆盖默认TTL)和自定义JWTProcessor的功能,你可以通过以下两种方式结合需求:

方式一:基于带缓存的JWKSource构建自定义Processor

先配置好带缓存的JWK源,再用它创建自定义的JWTProcessor,最后传入NimbusJwtDecoder:

@Bean
public JwtDecoder jwtDecoder(CacheManager cacheManager) throws MalformedURLException {
    // 1. 配置带缓存的JWK源
    JWKSetCache jwkSetCache = new DefaultJWKSetCache(cacheManager.getCache("jwks"));
    JWKSource<SecurityContext> jwkSource = new RemoteJWKSet<>(new URL(jwkSetUri), jwkSetCache);
    
    // 2. 创建并自定义JWTProcessor
    ConfigurableJWTProcessor<SecurityContext> jwtProcessor = new DefaultJWTProcessor<>();
    jwtProcessor.setJWKSource(jwkSource);
    
    // 添加你的自定义配置,比如设置签名密钥选择器、声明验证器等
    // jwtProcessor.setJWSKeySelector(new JWSVerificationKeySelector<>(JWSAlgorithm.RS256, jwkSource));
    // jwtProcessor.setClaimsVerifier(new CustomClaimsVerifier());
    
    // 3. 构建JwtDecoder
    return new NimbusJwtDecoder(jwtProcessor);
}

方式二:复用构建器的缓存配置,修改默认Processor

先用构建器配置好缓存,再获取默认生成的JWTProcessor进行自定义修改:

@Bean
public JwtDecoder jwtDecoder(CacheManager cacheManager) {
    // 1. 用构建器创建带缓存的基础解码器
    NimbusJwtDecoder decoder = NimbusJwtDecoder.withJwtSetUri(jwkSetUri)
            .cache(cacheManager.getCache("jwks"))
            .build();
    
    // 2. 获取并自定义JWTProcessor
    ConfigurableJWTProcessor<SecurityContext> jwtProcessor = 
            (ConfigurableJWTProcessor<SecurityContext>) decoder.getJwtProcessor();
    
    // 添加你的自定义处理逻辑,比如额外的声明验证
    jwtProcessor.setClaimsVerifier(claims -> {
        // 自定义验证逻辑示例
        if (!"your-target-audience".equals(claims.getAudience().get(0))) {
            throw new BadJwtException("Invalid audience");
        }
    });
    
    return decoder;
}

为什么原有两种方式无法直接结合?

NimbusJwtDecoder的withJwtSetUri构建器会自动创建并配置JWTProcessor,而直接传入processor的构造器是完全自定义processor的路径,两者入口不同。上面的方法通过复用缓存配置或JWK源,将两种需求结合了起来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:03:09