我使用的是Spring Security ,我试图将自己的oauth2authorizationfailurehandler添加到defaultoauth2authorizedclientmanager中,但我找不到这样做的方法。它看起来不像豆子;它看起来像是在oauth2clientconfiguration.oauth2clientwebmvcsecurityconfiguration.addargumentresolvers()中示例化的。
这个github问题看起来应该让我能够做到这一点,但我仍然不知道如何:https://github.com/spring-projects/spring-security/issues/7583
我看了里面的文件https://github.com/spring-projects/spring-security/commit/2dd40c7de5de72b8f18a51c490d640619c5a6301,而我仍然被难住了。
我想添加失败处理程序的原因是我想处理刷新令牌过期时refreshtokenoauth2authorizedclientprovider.authorize()引发的oauth2authorizationexception。具体地说,当刷新令牌过期时,我想用http403而不是http500来响应。
1条答案
按热度按时间rks48beu1#
我知道如何定制defaultoauth2authorizedclientmanager的失败处理程序,但它实际上并没有实现我的最终目标,即优雅地处理registeredoauth2clientargumentresolver在尝试使用过期的刷新令牌从auth服务器检索新的访问令牌时抛出的oauth2authorizationexception。
要处理oauth2authorizationexception,请创建一个带有@exceptionhandler(oauth2authorizationexception.class)注解方法的@controlleradvice类,该方法可以执行任何您想要的操作。以下是我所做的:
如果出于某种原因您想要自定义defaultoauth2authorizedclientmanager失败处理程序,那么您可能需要创建一个全新的OAuth2AuthorizedClientTargetResolver bean(如下所示),并通过WebMVCConfigure(以下未显示)注册它: