有时用户在本地数据库中的刷新令牌变得陈旧。为了补充,我正在尝试在进行oauth2调用时添加prompt=consent
param。我在我的配置类和@Autowire AuthorizationCodeAccessTokenProvider
中尝试afterPropertiesSet
我正在做setTokenRequestEnhancer
然后意识到当我查看以下代码时,这个bean甚至都没有通过spring容器进行初始化OAuth2RestTemplate
private AccessTokenProvider accessTokenProvider = new AccessTokenProviderChain(Arrays.<AccessTokenProvider> asList(
new AuthorizationCodeAccessTokenProvider(), new ImplicitAccessTokenProvider(),
new ResourceOwnerPasswordAccessTokenProvider(), new ClientCredentialsAccessTokenProvider()));
搜索是否有任何弹簧代码正在调用org.springframework.security.oauth2.client.token.grant.code.AuthorizationCodeAccessTokenProvider.setAuthorizationRequestEnhancer(RequestEnhancer)
以了解如何访问它,但没有人调用它。
问题:如何在进行oauth2调用时动态添加参数userAuthorizationUri
?
答案 0 :(得分:2)
不幸的是,我还没有找到优雅的解决方案。但是,我注意到重定向是由UserRedirectRequiredException
触发的。
我能够动态添加请求参数,方法是注册自动修改此异常的自定义过滤器。
@Component
@Order(-102)
public class EnhanceUserRedirectFilter implements Filter {
@Override
public void init(final FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
try {
chain.doFilter(request, response);
} catch (final UserRedirectRequiredException ex) {
ex.getRequestParams().put("prompt", "consent");
throw ex;
}
}
@Override
public void destroy() {
}
}
请注意,此类servlet过滤器必须具有比Spring Security更高的优先级。就我而言, -102 的优先级高于Spring Security默认的 -100 。