2009-07-29 64 views
1

我试图覆盖Spring Security中的AuthenticationProcessingFilter。我已经做了以下配置中的XML:Spring的AuthenticationProcessingFilter覆盖

<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'

因缺乏instatiation属性。我希望他们是默认的。你知道如何配置它们吗?

回答

1

它不应该是:

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

您还需要禁用自动配置:

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

,然后,你不再需要<security:form-login>标签,因为你设置相同你的bean中的属性。

+0

`自动config`默认为false,所以这不应该是必要的。 – 2011-12-14 12:25:14

0

您需要遵循的方法纯粹取决于您在自定义过滤器中想要执行的操作。

我打了类似的问题,看看这个帖子的几点建议https://stackoverflow.com/a/12356510/686478

security:form-login内部创建了AuthenticationProcessingFilter一个bean定义,因此在相同的位置,重新界定它(在你的情况下,其FORM_LOGIN_FILTER或AUTHENTICATION_PROCESSING_FILTER因为它是所谓的2.x)会导致错误,因为豆已经通过HTTP命名空间处理程序规定。请参阅参考手册的Adding Your own filter部分。

容易的选择是自动配置设置为false,除去<form-login>并在预定的位置定义你的身份验证过滤器,但这样做,你也会松动可用性和安全配置的可读性,你将不得不管理the dependencies of your AuthenticationProcessingFilter上你自己的(比如设置AuthenticationManager,filterProcessesUrl等)。

如果你真的不想覆盖现有的认证过滤器,但实际上只是想做一些事前/事后处理,另一种方法是使用after或之前的属性定义自定义过滤器,在实际过滤器之前或之后调用。

注:根据您的主题行,我想你是打算用AUTHENTICATION_PROCESSING_FILTER而不是FILTER_SECURITY_INTERCEPTOR这是FilterSecurityInterceptor别名。

我知道这是一种过时的帖子,但我希望这将有助于一些:)