【问题标题】:How to inherit OAuth2AuthenticationProcessingFilter or add custom filter如何继承 OAuth2AuthenticationProcessingFilter 或添加自定义过滤器
【发布时间】:2017-09-10 19:59:34
【问题描述】:

我在基于休息的 API 中使用 OAuth2 令牌。我想覆盖 OAuth2AuthenticationProcessingFilter 以便我可以提取令牌,如果不是标题属性中的提供者作为授权(这可以作为标题中的 accessToken 属性提供长篇故事不要问为什么)。 要么 如果没有,那么谁能告诉我如何在 OAuth2AuthenticationProcessingFilter 之后添加另一个过滤器?

【问题讨论】:

  • 你试过.addFilterAfter(yourFilter, OAuth2AuthenticationProcessingFilter.class)configure(HttpSecurity)吗?
  • 我正在使用 xml 命名空间配置如何在该配置样式中执行此操作。
  • 能否请您展示一下您的 spring 安全配置?

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


【解决方案1】:

基本上,在 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

然后将该过滤器添加到您的 &lt;sec:http&gt; 元素中:

<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" />

【讨论】:

  • 为什么 valye 是 myId 在这里?告诉我什么应该是 resourceId 的正确值。
  • 您选择的任何值,但它必须在服务器上的&lt;resource-server&gt;authenticationManager 定义中以及在客户端定义(它是resourceIds)中相同:stackoverflow.com/questions/8598960/…
【解决方案2】:

更好的方法可能是扩展 org.springframework.security.oauth2.provider.authentication.BearerTokenExtractor 并为其创建 bean 并在

中引用它
<oauth:resource-server id="resourceServerFilter"
        token-services-ref="tokenServices" token-extractor-ref="idofyourtokenextractionbeanhere" 
        resource-id="myId" />

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 2019-02-21
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 2022-12-23
    • 2013-02-05
    • 2016-06-25
    • 2021-09-21
    相关资源
    最近更新 更多