2011-03-18 42 views
2

我有多个<http.../>元件(为了分别支持通过基本认证REST authetication和用户形式登录)以下配置:Spring Security 3.1.0.RC1:有多个<http.../>元素为什么我只能注册一个认证管理器?

<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传递给过滤器?

+0

这是在相关SpringSource论坛上您应该询问SpringSecurity开发人员的一类问题。根据我的经验,他们确实回答了这类问题,但答案并不总是您想要听到的。 – 2011-03-18 04:52:20

+0

我现在也这样做了。我发现在春季论坛上的回应是平淡无奇的,至少在春季框架论坛上。也许安全社区更加活跃。 – 2011-03-18 09:26:23

回答

4

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

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

相关问题