我正在运行从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的用途是什么。评论后,这个应用程序也很完美。
答案 0 :(得分:0)
我认为AuthenticationManager
委托将持久用户信息提取到一个或多个AuthenticationProviders
。身份验证提供程序(例如DaoAuthenticationProvider
,JaasAuthenticationProvider
,LdapAuthenticationProvider
,OpenIDAuthenticationProvider
)专门用于访问特定的用户信息存储库。参考手册的this part中提到了其他一些内容。它说:
您可能希望使用AuthenticationProvider
注册其他ProviderManager
bean,并且可以使用带有ref属性的元素执行此操作,其中该属性的值是您想要的提供者bean的名称添加。
换句话说,您可以指定多个AuthenticationProviders
,例如,在LDAP
数据库中查找用户,在SQL数据库中查找另一个用户。