我在基于rest的API中使用OAuth2令牌。我想覆盖OAuth2AuthenticationProcessingFilter,以便我可以在头属性中提取令牌(如果不是提供者)作为授权(这可以作为头文件中的accessToken属性提供,不要问为什么)。 要么 如果没有,那么任何人都可以告诉我如何在OAuth2AuthenticationProcessingFilter之后添加另一个过滤器吗?
答案 0 :(得分:2)
基本上,在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>
II。手动添加过滤器更换:
<bean id="resourceServerFilter"class="YourFilterImplementationClass">
<property name="authenticationManager" ref="authenticationManager"/>
</bean>
III。像往常一样将过滤器插入过滤器链:
<sec:custom-filter ref="resourceServerFilter" position="PRE_AUTH_FILTER" />
答案 1 :(得分:0)
一种更好的方法可能是扩展org.springframework.security.oauth2.provider.authentication.BearerTokenExtractor
并为其创建bean并在
<oauth:resource-server id="resourceServerFilter"
token-services-ref="tokenServices" token-extractor-ref="idofyourtokenextractionbeanhere"
resource-id="myId" />