基于Spring Security配置多个认证Provider
前面做的那个Flex项目最近有一个小改造,客户要在那个应用服务器基础上添加一个新的Service,但是这个新的服务是使用另外一套权限管理认证机制,因为预算很少,为了不增加部署成本,考虑部署在同一个BlazeDS上,查了一下Spring Security,发现可以部署多个认证Provider。
<!-- Data access object which stores authentication information -->
<bean id="inMemoryDaoImpl" class="org.springframework.security.userdetails.memory.InMemoryDaoImpl">
<property name="userMap">
<value>
rod=koala,ROLE_TELLER,ROLE_SUPERVISOR
dianne=emu,ROLE_TELLER
scott=wombat,ROLE_TELLER
peter=opal,disabled,ROLE_TELLER
</value>
</property>
</bean>
<!-- Authentication provider that queries our data access object -->
<bean id="daoAuthenticationProvider" class="org.springframework.security.providers.dao.DaoAuthenticationProvider">
<security:custom-authentication-provider />
<property name="userDetailsService"><ref bean="inMemoryDaoImpl"/></property>
<property name="forcePrincipalAsString"><value>true</value></property>
</bean>
不过默认如果auto-config=True来配置Spring Security,由于使用多个Provider时,默认的RememberMe服务会报告More than one UserDetailsService的错误。两种解决办法
设置auto-config=False,手工配置security设置,去掉RememberMe的设置(如果不使用RememberMe的服务的话)。或者使用user-service-ref来显式的指定一个用于RememberMe服务的UserDetailService即可。