Spring Security 3.1.0.RC1:使用多个<http ...>元素,为什么我只能注册一个身份验证管理器?</http ...>

时间:2011-03-18 04:31:12

标签: java spring-security

我有多个<http.../>元素的以下配置(为了通过基本身份验证和用户表单登录单独支持REST身份验证):

<security:http auto-config="false" pattern="/service/**" create-session="never" 
               entry-point-ref="basicAuthenticationEntryPoint" >
    <security:intercept-url pattern="/service/**" requires-channel="any" access="ROLE_REST_SERVICE" />
    <security:custom-filter position="BASIC_AUTH_FILTER" ref="basicAuthenticationFilter" />
</security:http>

<security:http auto-config="false" pattern="/**"
               entry-point-ref="loginUrlAuthenticationEntryPoint" >
    <security:logout logout-url="/logout" />
    <security:anonymous enabled="false"/>
    <security:custom-filter position="FORM_LOGIN_FILTER" ref="usernamePasswordAuthenticationFilter" />
    <security:custom-filter position="ANONYMOUS_FILTER" ref="anonymousAuthFilter" />
</security:http>

在我需要身份验证的两个过滤器(FORM_LOGIN_FILTER和BASIC_AUTH_FILTER)中,我引用了两个不同的身份验证管理器。

但是我收到一个错误,我已经注册了一个身份验证管理器。

为什么我在事先知道每个过滤器需要哪个身份验证提供程序时会使用一个身份验证管理器?

我是否应该使用身份验证管理器并将AuthenticationProvider作为bean启动并直接将其作为AuthenticationManager传递给过滤器?

1 个答案:

答案 0 :(得分:4)

在spring security 3.1中,您可以拥有多个http元素,每个元素都有自己的身份验证管理器。

您唯一需要做的就是将以下属性authentication-manager-ref="your ref"添加到http元素。