【问题标题】:Spring's AuthenticationProcessingFilter overrideSpring 的 AuthenticationProcessingFilter 覆盖
【发布时间】:2010-11-15 02:10:14
【问题描述】:

我正在尝试覆盖 Spring 安全性中的 AuthenticationProcessingFilter。我在 xml 中完成了以下配置:

<security:http access-decision-manager-ref="accessDecisionManager" >
        <security:intercept-url .../>
        <security:form-login login-page='/signin/' authentication-failure-url="/signin/?login_error" default-target-url='/signin/success'/>
        <security:anonymous/>
        <security:logout/>
        <security:remember-me/>
</security:http>

<bean class="myPackage.security.SessionCleanerFilter" >
    <security:custom-filter position="FILTER_SECURITY_INTERCEPTOR" />
    <property name="defaultTargetUrl" value="/signin/success" />
    <property name="authenticationFailureUrl" value="/signin/?login_error" />
    <property name="allowSessionCreation" value="true" />
</bean>

但这失败了,有很多例外

使用名称创建 bean 时出错 'myPackage.security.SessionCleanerFilter#0'

由于缺乏实例化属性。我希望他们默认。你知道如何配置它们吗?

【问题讨论】:

    标签: spring spring-security


    【解决方案1】:

    不应该是:

    <security:custom-filter position=“AUTHENTICATION_PROCESSING_FILTER”/>
    

    【讨论】:

      【解决方案2】:

      您还需要禁用自动配置:

      <security:http auto-config="false" access-decision-manager-ref="accessDecisionManager">
      

      然后,您不再需要 &lt;security:form-login&gt; 标记,因为您在 bean 中设置了相同的属性。

      【讨论】:

      • auto-config 默认为 false,因此没有必要。
      【解决方案3】:

      您需要遵循的方法完全取决于您在自定义过滤器中真正想要做什么。

      我遇到了类似的问题,请查看此帖子以获取一些建议https://stackoverflow.com/a/12356510/686478

      security:form-login 在内部为 AuthenticationProcessingFilter 创建一个 bean 定义,因此在同一位置重新定义它(在您的情况下,它在 2.x 中调用的 FORM_LOGIN_FILTER 或 AUTHENTICATION_PROCESSING_FILTER )会导致错误,因为 bean 已经由http 命名空间处理程序。请参阅参考手册的Adding Your own filter 部分。

      简单的选择是将 auto-config 设置为 false,删除 &lt;form-login&gt; 并在预定义的位置定义您的身份验证过滤器,但这样做您也会失去安全配置的可用性和可读性,您将不得不管理 @ 987654324@ 自行设置(如设置 AuthenticationManager、filterProcessesUrl 等)。

      如果您真的不想覆盖现有的身份验证过滤器,但实际上只是想做一些预处理/后处理,另一种选择是使用 after 或 before 属性定义您的自定义过滤器,这些属性在实际过滤器之前或之后调用。

      注意:根据您的主题行,我认为您打算使用 AUTHENTICATION_PROCESSING_FILTER 而不是 FilterSecurityInterceptor 的别名 FILTER_SECURITY_INTERCEPTOR。

      我知道这是一篇过时的帖子,但我希望这会对一些人有所帮助:)

      【讨论】:

        猜你喜欢
        • 2018-05-02
        • 2014-10-26
        • 1970-01-01
        • 2020-08-07
        • 2013-03-12
        • 2015-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多