User.java
public class User implements Serializable{
@Id
@Size(min=5,max=15)
@Column(name="username", unique=true)
private String username;
@OneToMany(mappedBy="user")
private Collection roles;
public User(User user) {
this.username=user.username;
this.roles=user.getRoles();
}
}
角色.java
public class Role implements Serializable{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String role;
@ManyToOne
@JoinColumn(name="username")
private User user;
}
UserServiceImpl.java
public class UserServiceImpl implements UserServiceDetails {
private UserRepo userRepo;
@Autowired
public void setUserRepo(UserRepo userRepo) {
this.userRepo = userRepo;
}
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user=userRepo.findUserByUsername(username);
if(user == null) {
throw new UsernameNotFoundException("Could not find user " + username);
}
CustomUser customUser=new CustomUser(user);
return customUser;
}
public final static class CustomUser extends User implements UserDetails
{
public CustomUser(User user) {
super(user);
}
@SuppressWarnings("unchecked")
@Override
public Collection extends GrantedAuthority> getAuthorities() {
List authorities =
new ArrayList();
authorities.addAll((Collection extends GrantedAuthority>) getRoles());
return authorities;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
}
}
安全性COnfig.java
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
private UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth
.userDetailsService(userDetailsService);
}
}
错误:
无法将角色转换为org.springframework.security.core.GrantedAuthority
我的角色表包含角色形式为“用户”,“管理员”等的角色
有什么建议么?
谢谢
解决方法:
正如Denium所说的那样,强制转换不会像在代码中那样起作用.我通过遍历每个角色来做类似的事情,像这样:
authorities = new HashSet(roles.size());
for (String role : roles)
authorities.add(new SimpleGrantedAuthority("ROLE_" + role));
标签:spring-security,spring,java,spring-mvc
来源: https://codeday.me/bug/20191119/2038237.html