Spring Security - 具有user-service-ref属性的JEE标记丢失映射的角色

时间:2013-04-11 21:07:59

标签: spring java-ee spring-security

我刚接触春天,让Spring安全,并且我一直在查看Schema文件,并注意到<jee>标记下面显示的<http>标记,其行为类似于某种类型preauth过滤魔术。使用mappable-roles属性,我可以获得我想要的角色,但是当我指定不同的user-service-ref属性时,指定UserDetailsService对象时,我将失去角色。

我的猜测是因为当我指定UserDetailsService对象时,Spring假设我不再需要这个角色......但是我做到了!

有关于此的任何想法吗?我可以以某种方式捕获这些细节吗?如果没有这个简单的<jee>标记,那么jee标记扩展到custom-filter和预认证等等是什么?

1 个答案:

答案 0 :(得分:2)

<jee>标记创建(以及其他)PreAuthenticatedAuthenticationProvider bean,该bean委托给用于加载用户详细信息的已配置策略。

此策略的默认实现是PreAuthenticatedGrantedAuthoritiesUserDetailsService,它只会复制它在身份验证令牌中找到的角色。

通过使用UserDetailsService属性将自定义user-service-ref覆盖此默认策略,您需要负责为用户分配角色。如果要保留有关用户角色的默认行为,可以简单地从上面提到的类中复制related line,因为Java EE角色仍然是映射的,并且可以在auth令牌中访问您自己的代码