1

我正在尝试覆盖 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>

但这失败了,有很多例外

创建名为“myPackage.security.SessionCleanerFilter#0”的 bean 时出错

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

4

3 回答 3

1

不应该是:

<security:custom-filter position=“AUTHENTICATION_PROCESSING_FILTER”/>
于 2009-07-29T15:32:14.637 回答
0

您还需要禁用自动配置:

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

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

于 2009-11-20T10:01:19.227 回答
0

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

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

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

简单的选项是将 auto-config 设置为 false,删除<form-login>并在预定义的位置定义您的 auth 过滤器,但是这样做您也会失去安全配置的可用性和可读性,并且您必须管理AuthenticationProcessingFilter对您的依赖项自己的(如设置 AuthenticationManager、filterProcessesUrl 等)。

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

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

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

于 2012-09-11T01:08:03.197 回答