如何正确配置与使用OAuth2RefreshtokensWebFilter?
解决OAuth2RefreshtokensWebFilter获取Authentication为null的问题
核心问题原因
你当前把过滤器放在OAuth2LoginAuthenticationFilter之后,但此时SecurityContext还未被后续的过滤器(比如SecurityContextHolderAwareRequestFilter)绑定到当前请求上下文,所以SecurityContextHolder.getContext().getAuthentication()会返回null。
正确的过滤器添加方式
将OAuth2RefreshtokensWebFilter添加到SecurityContextHolderAwareRequestFilter之后,这个过滤器负责将已认证的Authentication对象注入到请求上下文,确保你能获取到有效认证信息:
.and() // JHipster Generated .addFilterAfter(oAuth2RefreshTokensWebFilter, SecurityContextHolderAwareRequestFilter.class) .oauth2Client(); // JHipster Generated
额外的校验建议
在过滤器逻辑中先做非空校验,避免空指针异常:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication != null && authentication.isAuthenticated()) { // 执行你的token刷新逻辑 }
补充说明
对于Keycloak作为SSO的场景,JHipster的OAuth2登录流程中,OAuth2LoginAuthenticationFilter完成认证后,会由SecurityContextPersistenceFilter将认证信息存入SecurityContext,再由SecurityContextHolderAwareRequestFilter将上下文绑定到当前请求。选择这个过滤器作为后置节点,能确保你的刷新过滤器在认证上下文完全就绪后执行。
内容的提问来源于stack exchange,提问作者Another Good Guy
相关产品推荐
相关产品推荐

