java - Spring security Role 无法转换为授权权限

标签 java spring spring-mvc spring-security

用户.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<Role> 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<GrantedAuthority> authorities =
                    new ArrayList<GrantedAuthority>();
            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;
        }

    }

}

SecurityCONfig.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<GrantedAuthority>(roles.size());

for (String role : roles)
    authorities.add(new SimpleGrantedAuthority("ROLE_" + role));

关于java - Spring security Role 无法转换为授权权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32658431/

相关文章:

java - 您可以使用整数值而不是 EnumType.STRING 或 ORDINAL 来保存枚举吗?

java - JdbcTemplate.excute -spring- 不与 plsql 一起使用

java - JavaScript中区分内网和外网IP地址

java - 关于System.out.printf的问题/关于输出的问题

java - 下载文件大小 - JavaME

java - 尝试从现有项目生成变更日志文件时出现错误 "Table name pattern can not be NULL or Empty"

Java: mytextarea.setText ("hello") + Thread.sleep(1000) = 奇怪的结果

java - 如何 Swagger 注释具有复杂对象的 Spring GET @RequestMapping

java - 如何在 spring-data-rest 中将 Page<ObjectEntity> 映射到 Page<ObjectDTO>

java - Spring : registering bean by private method