我刚接触春天,让Spring安全,并且我一直在查看Schema文件,并注意到<jee>
标记下面显示的<http>
标记,其行为类似于某种类型preauth过滤魔术。使用mappable-roles
属性,我可以获得我想要的角色,但是当我指定不同的user-service-ref
属性时,指定UserDetailsService
对象时,我将失去角色。
我的猜测是因为当我指定UserDetailsService
对象时,Spring假设我不再需要这个角色......但是我做到了!
有关于此的任何想法吗?我可以以某种方式捕获这些细节吗?如果没有这个简单的<jee>
标记,那么jee
标记扩展到custom-filter
和预认证等等是什么?
答案 0 :(得分:2)
<jee>
标记创建(以及其他)PreAuthenticatedAuthenticationProvider
bean,该bean委托给用于加载用户详细信息的已配置策略。
此策略的默认实现是PreAuthenticatedGrantedAuthoritiesUserDetailsService
,它只会复制它在身份验证令牌中找到的角色。
通过使用UserDetailsService
属性将自定义user-service-ref
覆盖此默认策略,您需要负责为用户分配角色。如果要保留有关用户角色的默认行为,可以简单地从上面提到的类中复制related line,因为Java EE角色仍然是映射的,并且可以在auth令牌中访问您自己的代码