我正在使用以下代码创建内存用户:
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("user").password("pass").authorities("READ","WRITE").roles("USER").build());
System.out.println("user created");
return manager;
}
我的REST控制器方法之一中包含以下代码:
System.out.println("printing authorities..");
User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
user.getAuthorities().forEach(item-> System.out.println(item.toString()));
我得到以下输出:
printing authorities..
ROLE_USER
我的问题是这样吗?如果执行链接方法调用authorities("XX").roles("YY")
,则后者将覆盖前者。
我想PermissionEvaluator
在检查角色的基础上,使用“自定义”来评估权限。如何向用户提供其他权限,例如读/写?
我的问题是这样吗?如果一个链接方法调用Authority(“ XX”)。roles(“ YY”),则后一个覆盖前者。
正如@dur所提到的,这是它的实现方式。但是请注意,hasRole('XX')
它将在您的应用程序中检查Role_XX,而hasAuthroirty('XX')
将检查XX。取决于您的应用程序如何定义角色。如果在您的应用程序中每个角色都以Role_为前缀,则hasRole提供自动添加该前缀的便捷方法。
我想使用Custom PermissionEvaluator评估权限,然后检查角色。如何向用户提供其他权限,例如读/写?
我想您已经在此代码行中添加了该代码:
.authorities("READ","WRITE")
由于这.roles("USER")
将覆盖先前的声明,因此可以将其更改为:
.authorities("READ","WRITE","ROLE_USER")
并删除roles
声明。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句