我正在尝试在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'
由于缺乏instatiation属性。我希望他们是默认的。你知道如何配置它们吗?
答案 0 :(得分:1)
不应该是:
<security:custom-filter position=“AUTHENTICATION_PROCESSING_FILTER”/>
答案 1 :(得分:0)
您还需要禁用自动配置:
<security:http auto-config="false" access-decision-manager-ref="accessDecisionManager">
然后,您不再需要<security:form-login>
标记,因为您在bean中设置了相同的属性。
答案 2 :(得分:0)
您需要完全遵循的方法取决于您在自定义过滤器中真正想要做的事情。
我遇到了类似的问题,请看一下这篇文章,提出一些建议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,删除<form-login>
并在预定义的位置定义您的auth过滤器,但这样做还会破坏安全配置的可用性和可读性,并且您将不得不自己管理the dependencies of your AuthenticationProcessingFilter(如设置AuthenticationManager,filterProcessesUrl等)。
如果你真的不想覆盖现有的auth过滤器但实际上只是想做一些前/后处理,另一种方法是使用属性之后或之前定义自定义过滤器,这些属性在实际过滤器之前或之后被调用。
注意:根据您的主题行,我认为您打算使用AUTHENTICATION_PROCESSING_FILTER,而不是FILTER_SECURITY_INTERCEPTOR,它是FilterSecurityInterceptor的别名。
我知道这是一篇过时的帖子,但我希望这会有所帮助:)