使用自定义authenticationManager和daoAuthenticationProvider bean

时间:2014-07-23 12:46:52

标签: spring spring-mvc spring-security

我正在运行从github下载的小型春季mvc 3应用程序(Spring in action 3 book中的Spitter)。在Spring安全文件中,他们为authenticationManager和daoAuthenticationProvider编写了bean,就像这样

<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.3.xsd">

<http auto-config="true" use-expressions="true">
    <intercept-url pattern="/home*" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')"/>
    <intercept-url pattern="/spitters/**" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')" />
    <intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
    <form-login login-processing-url="/static/j_spring_security_check"
        login-page="/login" authentication-failure-url="/login?login_error=t" />
    <logout logout-success-url="/home"/>
</http>

<beans:bean id="daoAuthenticationProvider"
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
    <beans:property name="userDetailsService" ref="userDetailsService" />
</beans:bean>

<beans:bean id="authenticationManager"
    class="org.springframework.security.authentication.ProviderManager">
    <beans:property name="providers">
        <beans:list>
            <beans:ref local="daoAuthenticationProvider" />
        </beans:list>
    </beans:property>
</beans:bean>

<authentication-manager>
    <authentication-provider user-service-ref="userDetailsService">
        <password-encoder hash="md5" />
    </authentication-provider>
</authentication-manager>

或此链接https://github.com/karolgornicki/spitter/blob/master/src/main/webapp/WEB-INF/spring-security.xml

这两个bean authenticationManager和daoAuthenticationProvider的用途是什么。评论后,这个应用程序也很完美。

1 个答案:

答案 0 :(得分:0)

我认为AuthenticationManager委托将持久用户信息提取到一个或多个AuthenticationProviders。身份验证提供程序(例如DaoAuthenticationProviderJaasAuthenticationProviderLdapAuthenticationProviderOpenIDAuthenticationProvider)专门用于访问特定的用户信息存储库。参考手册的this part中提到了其他一些内容。它说:

您可能希望使用AuthenticationProvider注册其他ProviderManager bean,并且可以使用带有ref属性的元素执行此操作,其中该属性的值是您想要的提供者bean的名称添加。

换句话说,您可以指定多个AuthenticationProviders,例如,在LDAP数据库中查找用户,在SQL数据库中查找另一个用户。