Spring文档说ProviderManager
是AuthenticationManager
的默认实现,但它是由安全命名空间自动创建和连接的ProviderManager
实例?
换句话说,此类配置是否会自动创建ProviderManager
:
<authentication-manager>
<authentication-provider>
<password-encoder hash="md5"/>
<jdbc-user-service data-source-ref="dataSource"/>
</authentication-provider>
</authentication-manager>
否则,我需要做什么(或申报)?
假设我想插入自己的AuthenticationManager
实现,我将如何使用命名空间配置它?
我还想指定AuthenticationProvider
中应注册哪个ProviderManager
。我找到了以下配置代码:
<bean id="authenticationManager"
class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider"/>
<ref local="anonymousAuthenticationProvider"/>
</list>
</property>
</bean>
但这还够吗?声明AuthenticationProvider
列表的正确方法是什么?有关此问题的文档不是很清楚和完整。
答案 0 :(得分:4)
换句话说,这样的配置会自动创建一个 ProviderManager的实例:
根据附录的B2部分,答案是肯定的。
假设我想插入自己的实现 AuthenticationManager,我如何使用命名空间配置它?
根据B.3.1节:
<global-method-security authentication-manager-ref="..." >
声明AuthenticationProvider列表的正确方法是什么?
从blog post开始,不应使用<authentication-manager> ... </authentication-manager>
,而应使用与此类似的内容:
<bean id="authenticationManager" class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<ref bean="authenticationProvider" />
<ref bean="anonymousProvider" />
</list>
</property>
</bean>
<bean id="authenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="passwordEncoder">
<bean class="org.springframework.security.authentication.encoding.Md5PasswordEncoder" />
</property>
<property name="userDetailsService" ref="userService" />
</bean>
<bean id="anonymousProvider" class="org.springframework.security.authentication.AnonymousAuthenticationProvider">
<property name="key" value="SomeUniqueKeyForThisApplication" />
</bean>
答案 1 :(得分:0)
我使用以下配置和自定义身份验证提供程序;
<authentication-manager>
<authentication-provider user-service-ref="myUserDetailsService">
<password-encoder hash="md5">
<salt-source user-property="username" />
</password-encoder>
</authentication-provider>
</authentication-manager>
<beans:bean id="myUserDetailsService" autowire="byType" class="my.user.UserDetailsServiceImpl">
<beans:property name="userManagementService" ref="userManagementService"></beans:property>
</beans:bean>