我不确定如何使用 Spring Security 实现嵌套身份验证。但是您可以有两个单独的UserDetailsService
实现。考虑当您有两种类型的 URL/**
和的情况/admin/**
,并且它们可以被两个不同的用户组使用。从 Spring Security 3.1 开始,您可以使用多个http标签(请参阅相应的文档):
<http pattern="/admin/**" authentication-manager-ref="adminAuthenticationManager">
<intercept-url pattern="/**" access="ROLE_ADMIN" />
...
</http>
<authentication-manager id="adminAuthenticationManager" >
<authentication-provider user-service-ref="adminUserDetailsService"/>
</authentication-manager>
<bean id="adminUserDetailsService" class="com.mucompany.security.AdminUserDetailsService"/>
<!-- No pattern, so everything will be matched -->
<http authentication-manager-ref="adminAuthenticationManager">
<intercept-url pattern="/**" access="ROLE_USER" />
...
</http>
<authentication-manager id="userAuthenticationManager" >
<authentication-provider user-service-ref="publicUserDetailsService"/>
</authentication-manager>
<bean id="publicUserDetailsService" class="com.mucompany.security.PublicUserDetailsService"/>
您甚至可以使用entry-point-ref属性为每个http标签声明不同的入口点。