【问题标题】:Spring custom filters one after each other in the filter chainSpring自定义过滤器在过滤器链中一个接一个
【发布时间】:2019-12-14 22:33:08
【问题描述】:

我正在向我们的应用程序添加一个新过滤器。过滤器本身可以工作,但问题是它需要在过滤器链中的另一个自定义过滤器和 spring 抱怨之前出现。

这是我们的 permissions.xml 中的一个示例:

<security:http-basic/>
        <custom-filter before="path.to.our.filter.OldFilter" ref="newFilter" />
        <custom-filter before="FORM_LOGIN_FILTER" ref="oldFilter" />
    </security:http>
    <beans:bean id="newFilter" class="path.to.our.other.filter.NewFilter"/>
    <beans:bean id="oldFilter" class="path.to.our.filter.OldFilter"/>

这抱怨以下错误:

Caused by: org.xml.sax.SAXParseException: cvc-enumeration-valid: Value 'com.iai.argus.common.jetty_spring.util.BasicAuthUsernameExtractorFilter' is not facet-valid with respect to enumeration '[FIRST, CHANNEL_FILTER, SECURITY_CONTEXT_FILTER, CONCURRENT_SESSION_FILTER, WEB_ASYNC_MANAGER_FILTER, HEADERS_FILTER, CORS_FILTER, CSRF_FILTER, LOGOUT_FILTER, X509_FILTER, PRE_AUTH_FILTER, CAS_FILTER, FORM_LOGIN_FILTER, OPENID_FILTER, LOGIN_PAGE_FILTER, DIGEST_AUTH_FILTER, BASIC_AUTH_FILTER, REQUEST_CACHE_FILTER, SERVLET_API_SUPPORT_FILTER, JAAS_API_SUPPORT_FILTER, REMEMBER_ME_FILTER, ANONYMOUS_FILTER, SESSION_MANAGEMENT_FILTER, EXCEPTION_TRANSLATION_FILTER, FILTER_SECURITY_INTERCEPTOR, SWITCH_USER_FILTER, LAST]'. It must be a value from the enumeration.

我需要一种在旧过滤器和 FORM_LOGIN_FILTER 之前插入新过滤器的方法。我该怎么做?

【问题讨论】:

  • 这些是订单/弹簧安全的参考过滤器预定义过滤器 [FIRST, CHANNEL_FILTER, SECURITY_CONTEXT_FILTER, CONCURRENT_SESSION_FILTER, WEB_ASYNC_MANAGER_FILTER, HEADERS_FILTER, CORS_FILTER, CSRF_FILTER, LOGOUT_FILTER, X509_FILTER, PRE_AUTH_FILTER, CAS_FILTER, FORM_LOGIN_FILTER, OPENID_FILTER, LOGIN_PAGE_FILTER, DIGEST_AUTH_FILTER, BASIC_AUTH_FILTER, REQUEST_CACHE_FILTER, SERVLET_API_SUPPORT_FILTER, JAAS_API_SUPPORT_FILTER, REMEMBER_ME_FILTER, ANONYMOUS_FILTER, SESSION_MANAGEMENT_FILTER, EXCEPTION_TRANSLATION_FILTER, FILTER_SECURITY_INTERCEPTOR, SWITCH_USER_FILTER, LAST]
  • 您不能通过引用另一个自定义过滤器顺序来配置自定义过滤器。您应该说之前/之后/位置预定义的过滤器。所以如果你想在oldFilter之前添加newFilter,你可以尝试在CAS_FILTER之前添加newFilter并调试顺序以确保
  • @PraveenKumarLalasangi 你是对的,把它放在 CAS_FILTER 之前非常适合我的情况。我猜不允许连续使用 2 个自定义过滤器。无论如何,让您的评论成为答案,我会接受它,因为它是我问题的正确解决方案..
  • 随意写答案。目前我做不到。无论回答者如何,如何回答都更重要。谢谢

标签: spring spring-security


【解决方案1】:

(在评论的帮助下)
在我的情况下,将新过滤器放在 CAS_FILTER 之前。

您不能通过引用另一个自定义过滤器顺序来配置自定义过滤器。您应该说之前/之后/位置预定义的过滤器。所以如果你想在oldFilter之前添加newFilter,你可以尝试在CAS_FILTER之前添加newFilter并调试顺序以确保

【讨论】:

    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2020-11-04
    • 2019-12-25
    • 1970-01-01
    • 2012-01-30
    • 2019-10-01
    相关资源
    最近更新 更多