Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过userDetailsManager更改用户角色_Java_Spring_Spring Security_Roles - Fatal编程技术网

Java 通过userDetailsManager更改用户角色

Java 通过userDetailsManager更改用户角色,java,spring,spring-security,roles,Java,Spring,Spring Security,Roles,我想更改用户的角色。正在更改用户在数据库中的角色。一切都基于Spring安全性 我的代码: UserDetails user = userDetailsManager.loadUserByUsername(userData.getUser().getUsername()); user.getAuthorities().add(new SimpleGrantedAuthority(role)); userDetailsManager.updateUser(user); 错误: Error:(

我想更改用户的角色。正在更改用户在数据库中的角色。一切都基于Spring安全性

我的代码:

UserDetails user = userDetailsManager.loadUserByUsername(userData.getUser().getUsername());

user.getAuthorities().add(new SimpleGrantedAuthority(role));

userDetailsManager.updateUser(user);
错误:

Error:(99, 30) java: method add in interface java.util.Collection<E> cannot be applied to
given types;
  required: capture#1 of ? extends org.springframework.security.core.GrantedAuthority
  found: org.springframework.security.core.authority.SimpleGrantedAuthority
  reason: actual argument    
org.springframework.security.core.authority.SimpleGrantedAuthority cannot be converted to   
capture#1 of ? extends org.springframework.security.core.GrantedAuthority by method   
invocation conversion
错误:(99,30)java:method加载项接口java.util.Collection无法应用于
给定类型;
必需:捕获#1个?扩展org.springframework.security.core.GrantedAuthority
找到:org.springframework.security.core.authority.SimpleGrantedAuthority
理由:实际论点
org.springframework.security.core.authority.SimpleGrantedAuthority无法转换为
捕获#1个?通过方法扩展org.springframework.security.core.GrantedAuthority
调用转换

我不知道为什么会有这样的错误。如何更改用户的角色?

您可以通过从现有的UserDetails对象创建新的UserDetails对象,然后调用UserDetailsManager.updateUser()方法来更新给定用户的角色,如下所示:

    UserDetails oldDetails = userDetailsManager.loadUserByUsername(user);
    UserDetails newDetails = new User(user, oldDetails.getPassword(),  newRole);
    userDetailsManager.updateUser(newDetails);
  • 问题是不能将已知类型添加到包含未知类型的列表中。(见附件)
  • 用户是不可变的,所以为了修改,您应该克隆现有用户并使用新角色

  • SimpleGrantedAuthority是否扩展授权?你能显示它的代码吗?是的,它实现了这个接口。试试
    GrantedAuthority ga=new-SimpleGrantedAuthority(角色);user.getAuthories().add(ga)无,它不工作:(