如何继承OAuth2AuthenticationProcessingFilter或添加自定义筛选器

时间:2017-04-14 14:29:58

标签: java spring spring-security spring-security-oauth2

我在基于rest的API中使用OAuth2令牌。我想覆盖OAuth2AuthenticationProcessingFilter,以便我可以在头属性中提取令牌(如果不是提供者)作为授权(这可以作为头文件中的accessToken属性提供,不要问为什么)。 要么 如果没有,那么任何人都可以告诉我如何在OAuth2AuthenticationProcessingFilter之后添加另一个过滤器吗?

2 个答案:

答案 0 :(得分:2)

基本上,在XML中,要使用默认值,请添加resource-server

<oauth:resource-server id="resourceServerFilter"
        token-services-ref="tokenServices"
        resource-id="myId" />

添加了OAuth2AuthenticationManagerOAuth2AuthenticationProcessingFilter(有关详细信息,请参阅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" />