我在基于 REST 的 API 中使用 OAuth2 token 。我想重写 OAuth2AuthenticationProcessingFilter ,以便我可以提取 token (如果不是 header 属性中的提供程序作为授权)(这可以作为 header 长篇故事中的 accessToken 属性提供,不要问为什么)。 或者 如果没有那么谁能告诉我如何在 OAuth2AuthenticationProcessingFilter 之后添加另一个过滤器?
最佳答案
基本上,在 XML 中,要使用默认值,您可以添加 resource-server
<oauth:resource-server id="resourceServerFilter"
token-services-ref="tokenServices"
resource-id="myId" />
其中添加了 OAuth2AuthenticationManager
和OAuth2AuthenticationProcessingFilter
(详情请参阅https://github.com/spring-projects/spring-security-oauth/blob/ec215f79f4f73f8bb5d4b8a3ff9abe15b3335866/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/config/xml/ResourceServerBeanDefinitionParser.java)
然后将该过滤器添加到您的 <sec:http>
中元素:
<sec:custom-filter ref="resourceServerFilter" position="PRE_AUTH_FILTER" />
但是如果你需要使用OAuth2AuthenticationProcessingFilter
特化而不是 OAuth2AuthenticationProcessingFilter
本身,您可以执行以下操作:
我。添加OAuth2AuthenticationManager
手动:
<bean id="authenticationManager" class="org.springframework.security.oauth2.config.xml.OAuth2AuthenticationManager">
<property name="tokenServices" ref="tokenServices"/>
<property name="resourceId" value="myId"/>
</bean>
二.手动添加过滤器替换件:
<bean id="resourceServerFilter"class="YourFilterImplementationClass">
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
三.像往常一样将过滤器插入过滤器链:
<sec:custom-filter ref="resourceServerFilter" position="PRE_AUTH_FILTER" />
关于java - 如何继承OAuth2AuthenticationProcessingFilter或添加自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43413562/