Quarkus SmallRye:本地JWT验证密钥文件缓存刷新问题问询
解决Quarkus本地JWT验证密钥文件不刷新的问题
方法一:配置SmallRye JWT自动刷新间隔
Quarkus基于SmallRye JWT实现JWT验证,针对本地密钥文件,可通过配置开启自动刷新:
- 在
application.properties中添加刷新间隔配置:
修改本地JSON文件后,等待配置的间隔时间,服务会自动加载新密钥。# 每30秒刷新一次本地密钥文件,支持s(秒)/m(分钟)/h(小时)等单位 smallrye.jwt.verify.key.refresh-interval=30s
方法二:自定义密钥提供者(灵活控制刷新逻辑)
如果需要更精细的控制(比如监听文件变化实时刷新),可以自定义密钥定位器:
- 实现
JWKSetLocator接口,每次调用时读取最新的本地文件内容:import io.smallrye.jwt.auth.principal.JWKSetLocator; import jakarta.enterprise.context.ApplicationScoped; import java.nio.file.Files; import java.nio.file.Paths; @ApplicationScoped public class CustomJWKSetLocator implements JWKSetLocator { @Override public String getJWKSet(String location) { try { // 每次验证JWT时都会读取最新的本地文件内容 return new String(Files.readAllBytes(Paths.get(location))); } catch (Exception e) { throw new RuntimeException("读取JWK集合文件失败", e); } } } - 在
application.properties中指定使用自定义定位器:smallrye.jwt.verify.jwk-set-locator=com.yourpackage.CustomJWKSetLocator
方法三:结合Quarkus配置刷新机制(针对配置路径变更)
如果需要通过修改配置切换密钥路径并实时生效,可开启Quarkus的配置刷新:
- 开启配置刷新功能:
quarkus.config-refresh.enabled=true - 将密钥位置配置标记为可刷新:
修改smallrye.jwt.verify.key.location=${my.jwt.key.location:/path/to/default/jwks.json} quarkus.config-refresh.refreshable-configs=my.jwt.key.locationmy.jwt.key.location的值时,Quarkus会自动刷新密钥配置,加载新路径下的文件。
内容的提问来源于stack exchange,提问作者Timz
相关产品推荐
相关产品推荐

