基于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即可。