Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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

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 转换集合<;对象>;列出<;字符串>;_Java_Spring_Spring Security - Fatal编程技术网

Java 转换集合<;对象>;列出<;字符串>;

Java 转换集合<;对象>;列出<;字符串>;,java,spring,spring-security,Java,Spring,Spring Security,我无法从用户对象中的角色集合中获取作为字符串列表的用户角色。 我想将用户角色设置为List以在loadUserByUsername方法上的userserviceimentation中实现它,在该方法中,我将角色名称作为列表传递给socialUserDetailsSimplementation类,以使社交登录可用。我会感激你的解决方案 用户模型: @Entity @Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))

我无法从
用户
对象中的
角色集合
中获取作为
字符串
列表的用户角色。 我想将用户角色设置为
List
以在
loadUserByUsername
方法上的
userserviceimentation
中实现它,在该方法中,我将角色名称作为列表传递给
socialUserDetailsSimplementation
类,以使社交登录可用。我会感激你的解决方案

用户模型

@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {

    public static final String ROLE_USER = "ROLE_USER";
    public static final String ROLE_ADMIN = "ROLE_ADMIN";

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name ="user_id", nullable = false)
    private Long userId;

    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private String userName;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "users_roles",
            joinColumns = @JoinColumn(
                    name = "user_id", referencedColumnName = "user_id"),
            inverseJoinColumns = @JoinColumn(
                    name = "role_id", referencedColumnName = "id"))
    private Collection<Role> roles;

    @Column(name = "enabled")
    private boolean enabled;


    public User() {
        super();
        this.enabled=false;

    }

    public User(String firstName, String lastName, String email, String password) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
    }

    public User(String firstName, String lastName, String email, String password, Collection<Role> roles) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.roles = roles;
    }

    public User(String firstName, String lastName, String email, String password, String userName, Collection<Role> roles) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.userName = userName;
        this.roles = roles;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public Collection<Role> getRoles() {
        return roles;
    }

    public void setRoles(Collection<Role> roles) {
        this.roles = roles;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }


}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;




    @Override
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
        User user = userRepository.findByUserName(userName);
        if (user == null) {
            throw new UsernameNotFoundException("Invalid username or password.");
        }


       List<String> roleNames =  (Collectors.toList(user.getRoles()));



        List<GrantedAuthority> grantList = new ArrayList<GrantedAuthority>();
        if (roleNames != null) {
            for (String role : roleNames) {
                GrantedAuthority authority = new SimpleGrantedAuthority(role);
                grantList.add(authority);
            }
        }


        SocialUserDetailsImpl userDetails = new SocialUserDetailsImpl(user,  roleNames);
                return userDetails;
    }
public class SocialUserDetailsImpl implements SocialUserDetails {

private static final long serialVersionUID = 1L;
private List<GrantedAuthority> list = new ArrayList<GrantedAuthority>();
private User user;

public SocialUserDetailsImpl(User user, List<String> roleNames) {
    this.user = user;

    for (String roleName : roleNames) {

        GrantedAuthority grant = new SimpleGrantedAuthority(roleName);
        this.list.add(grant);
    }
}

@Override
public String getUserId() {
    return this.user.getUserId() + "";
}

@Override
public String getUsername() {
    return user.getUserName();
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return list;
}

@Override
public String getPassword() {
    return user.getPassword();
}

@Override
public boolean isAccountNonExpired() {
    return true;
}

@Override
public boolean isAccountNonLocked() {
    return true;
}

@Override
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
public boolean isEnabled() {
    return this.user.isEnabled();
}

}
@实体
@表(uniqueConstraints=@UniqueConstraint(columnNames=“email”))
公共类用户{
公共静态最终字符串ROLE\u USER=“ROLE\u USER”;
公共静态最终字符串ROLE\u ADMIN=“ROLE\u ADMIN”;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“user\u id”,null=false)
私有长用户ID;
私有字符串名;
私有字符串lastName;
私人字符串电子邮件;
私有字符串密码;
私有字符串用户名;
@ManyToMany(fetch=FetchType.EAGER,cascade=CascadeType.ALL)
@可接合(
name=“用户\角色”,
joinColumns=@JoinColumn(
name=“user\u id”,referencedColumnName=“user\u id”),
inverseJoinColumns=@JoinColumn(
name=“role\u id”,referencedColumnName=“id”))
私人收藏角色;
@列(name=“enabled”)
启用私有布尔值;
公共用户(){
超级();
此.enabled=false;
}
公共用户(字符串名、字符串名、字符串电子邮件、字符串密码){
this.firstName=firstName;
this.lastName=lastName;
this.email=电子邮件;
this.password=密码;
}
公共用户(字符串名、字符串名、字符串电子邮件、字符串密码、集合角色){
this.firstName=firstName;
this.lastName=lastName;
this.email=电子邮件;
this.password=密码;
this.roles=角色;
}
公共用户(字符串名、字符串名、字符串电子邮件、字符串密码、字符串用户名、集合角色){
this.firstName=firstName;
this.lastName=lastName;
this.email=电子邮件;
this.password=密码;
this.userName=用户名;
this.roles=角色;
}
公共长getUserId(){
返回用户标识;
}
public void setUserId(长userId){
this.userId=userId;
}
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
公共布尔值isEnabled(){
返回启用;
}
已启用公共void集(已启用布尔值){
this.enabled=已启用;
}
公共集合getRoles(){
返回角色;
}
公共void集合角色(集合角色){
this.roles=角色;
}
公共字符串getUserName(){
返回用户名;
}
public void setUserName(字符串用户名){
this.userName=用户名;
}
}
UserServiceImpl

@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {

    public static final String ROLE_USER = "ROLE_USER";
    public static final String ROLE_ADMIN = "ROLE_ADMIN";

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name ="user_id", nullable = false)
    private Long userId;

    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private String userName;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "users_roles",
            joinColumns = @JoinColumn(
                    name = "user_id", referencedColumnName = "user_id"),
            inverseJoinColumns = @JoinColumn(
                    name = "role_id", referencedColumnName = "id"))
    private Collection<Role> roles;

    @Column(name = "enabled")
    private boolean enabled;


    public User() {
        super();
        this.enabled=false;

    }

    public User(String firstName, String lastName, String email, String password) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
    }

    public User(String firstName, String lastName, String email, String password, Collection<Role> roles) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.roles = roles;
    }

    public User(String firstName, String lastName, String email, String password, String userName, Collection<Role> roles) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.userName = userName;
        this.roles = roles;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public Collection<Role> getRoles() {
        return roles;
    }

    public void setRoles(Collection<Role> roles) {
        this.roles = roles;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }


}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;




    @Override
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
        User user = userRepository.findByUserName(userName);
        if (user == null) {
            throw new UsernameNotFoundException("Invalid username or password.");
        }


       List<String> roleNames =  (Collectors.toList(user.getRoles()));



        List<GrantedAuthority> grantList = new ArrayList<GrantedAuthority>();
        if (roleNames != null) {
            for (String role : roleNames) {
                GrantedAuthority authority = new SimpleGrantedAuthority(role);
                grantList.add(authority);
            }
        }


        SocialUserDetailsImpl userDetails = new SocialUserDetailsImpl(user,  roleNames);
                return userDetails;
    }
public class SocialUserDetailsImpl implements SocialUserDetails {

private static final long serialVersionUID = 1L;
private List<GrantedAuthority> list = new ArrayList<GrantedAuthority>();
private User user;

public SocialUserDetailsImpl(User user, List<String> roleNames) {
    this.user = user;

    for (String roleName : roleNames) {

        GrantedAuthority grant = new SimpleGrantedAuthority(roleName);
        this.list.add(grant);
    }
}

@Override
public String getUserId() {
    return this.user.getUserId() + "";
}

@Override
public String getUsername() {
    return user.getUserName();
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return list;
}

@Override
public String getPassword() {
    return user.getPassword();
}

@Override
public boolean isAccountNonExpired() {
    return true;
}

@Override
public boolean isAccountNonLocked() {
    return true;
}

@Override
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
public boolean isEnabled() {
    return this.user.isEnabled();
}

}
@服务
公共类UserServiceImpl实现UserService{
@自动连线
私有用户存储库用户存储库;
@凌驾
public UserDetails loadUserByUsername(字符串用户名)引发UsernameNotFoundException{
User=userRepository.findByUserName(用户名);
if(user==null){
抛出新用户名NotFoundException(“无效用户名或密码”);
}
List roleNames=(Collectors.toList(user.getRoles());
List grantList=new ArrayList();
if(角色名称!=null){
for(字符串角色:角色名称){
授权机构=新的SimpleGrantedAuthority(角色);
增列(授权);
}
}
SocialUserDetailsImpl userDetails=新的SocialUserDetailsImpl(用户,角色名称);
返回用户详细信息;
}
SocialUserDetailsImpl

@Entity
@Table(uniqueConstraints = @UniqueConstraint(columnNames = "email"))
public class User {

    public static final String ROLE_USER = "ROLE_USER";
    public static final String ROLE_ADMIN = "ROLE_ADMIN";

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name ="user_id", nullable = false)
    private Long userId;

    private String firstName;
    private String lastName;
    private String email;
    private String password;
    private String userName;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinTable(
            name = "users_roles",
            joinColumns = @JoinColumn(
                    name = "user_id", referencedColumnName = "user_id"),
            inverseJoinColumns = @JoinColumn(
                    name = "role_id", referencedColumnName = "id"))
    private Collection<Role> roles;

    @Column(name = "enabled")
    private boolean enabled;


    public User() {
        super();
        this.enabled=false;

    }

    public User(String firstName, String lastName, String email, String password) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
    }

    public User(String firstName, String lastName, String email, String password, Collection<Role> roles) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.roles = roles;
    }

    public User(String firstName, String lastName, String email, String password, String userName, Collection<Role> roles) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.password = password;
        this.userName = userName;
        this.roles = roles;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public boolean isEnabled() {
        return enabled;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public Collection<Role> getRoles() {
        return roles;
    }

    public void setRoles(Collection<Role> roles) {
        this.roles = roles;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }


}
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;




    @Override
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
        User user = userRepository.findByUserName(userName);
        if (user == null) {
            throw new UsernameNotFoundException("Invalid username or password.");
        }


       List<String> roleNames =  (Collectors.toList(user.getRoles()));



        List<GrantedAuthority> grantList = new ArrayList<GrantedAuthority>();
        if (roleNames != null) {
            for (String role : roleNames) {
                GrantedAuthority authority = new SimpleGrantedAuthority(role);
                grantList.add(authority);
            }
        }


        SocialUserDetailsImpl userDetails = new SocialUserDetailsImpl(user,  roleNames);
                return userDetails;
    }
public class SocialUserDetailsImpl implements SocialUserDetails {

private static final long serialVersionUID = 1L;
private List<GrantedAuthority> list = new ArrayList<GrantedAuthority>();
private User user;

public SocialUserDetailsImpl(User user, List<String> roleNames) {
    this.user = user;

    for (String roleName : roleNames) {

        GrantedAuthority grant = new SimpleGrantedAuthority(roleName);
        this.list.add(grant);
    }
}

@Override
public String getUserId() {
    return this.user.getUserId() + "";
}

@Override
public String getUsername() {
    return user.getUserName();
}

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    return list;
}

@Override
public String getPassword() {
    return user.getPassword();
}

@Override
public boolean isAccountNonExpired() {
    return true;
}

@Override
public boolean isAccountNonLocked() {
    return true;
}

@Override
public boolean isCredentialsNonExpired() {
    return true;
}

@Override
public boolean isEnabled() {
    return this.user.isEnabled();
}

}
公共类SocialUserDetailsImpl实现SocialUserDetails{
私有静态最终长serialVersionUID=1L;
私有列表=新的ArrayList();
私人用户;
public SocialUserDetailsImpl(用户、列表角色名称){
this.user=用户;
用于(字符串roleName:roleName){
授权授予=新的SimpleGrantedAuthority(roleName);
本.列表.添加(授权);
}
}
@凌驾
公共字符串getUserId(){
返回此.user.getUserId()+“”;
}
@凌驾
公共字符串getUsername(){
返回user.getUserName();
}
@凌驾
本部分公共收藏

List<String> roleNames =  (Collectors.toList(user.getRoles()));
List roleNames=(Collectors.toList(user.getRoles());
您的角色名称包含user.getRoles().toString()的列表,而不是预期的角色名称

试一试

List roleNames=user.getRoles().stream()
.map(角色::getName)
.collect(Collectors.toList());

另外,在“角色用户”和“角色管理”字段中添加临时用户。

执行类似操作

List<Object> roleNames =  (Collectors.toList(user.getRoles()));
List<String> roleNamesString= new List<string> ();

for(Object a: roleNames){
   roleNameString.add(String.valueOf(a));
}
List roleNames=(Collectors.toList(user.getRoles());
List roleNamesString=新列表();
用于(对象a:角色名称){
添加(String.valueOf(a));
}

根据模型的复杂性,您可能需要重写Role类的toString方法。

基本上,您不需要将角色转换为
列表
,您可以通过

user.getRoles().stream()
    .map(role -> new SimpleGrantedAuthority(role.getRoleName()))
    .collect(Collectors.toList());
如果您确实需要
列表
,那么您可以这样做

user.getRoles().stream()
    .map(Role::getRoleName)
    .collect(Collectors.toList());
Sooo问题是什么