使用Spring Security时,无法在创建新用户的同时同时使用角色和权限

时间:2018-03-20 14:21:10

标签: spring spring-boot spring-security

我使用以下代码创建内存中用户:

@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来评估权限。如何为用户提供读/写等附加权限?

1 个答案:

答案 0 :(得分:1)

  

我的问题是,这应该是这样吗?如果做一个链式方法调用   当局(" XX")。角色(" YY"),后者写过前者。

正如@dur所提到的,这是它的实现方式。但请注意 npm install lucaszanella/react-native-dgram-shim 会在您的应用中检查 Role_XX ,而 hasRole('XX')会检查 XX 。取决于您的应用程序如何定义角色。如果您的应用中的每个角色都以角色_ 作为前缀,则hasRole会提供一种自动附加该前缀的便捷方式。

  

我想使用Custom PermissionEvaluator来评估权限   检查角色的顶部。我如何提供其他权限   喜欢读/写给用户?

我猜你已经用这一行把它放在你的代码中了:

hasAuthroirty('XX')

由于此.authorities("READ","WRITE") 覆盖了上一个声明,因此您可以将其更改为:

.roles("USER")

并删除.authorities("READ","WRITE","ROLE_USER") 声明。