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问题是什么