spring security中A granted authority textual representation is required

今天在学习spring security的使用时报错如下 An internal error occurred while trying to authenticate the user A granted authority textual representation is required

使用角色来控制权限的时候不仅仅
需要

        for (TRole role:roleList) {


            authorities.add(new SimpleGrantedAuthority("ROLE_"+role.getName()));
        }

在前面加上ROLE_的固定格式
还要注意数据库查询出来的值不能为空!
数据中含有空值都不可以

由于我是用数据库中的表来实验

这是改之前的表
在这里插入图片描述

这是改之后的表
在这里插入图片描述

加上后即可正常访问.

这个错误通常是由于在使用 Spring Security 进行身份验证和授权时,未正确配置用户角色导致的。在 Spring Security ,用户的角色被表示为权限(Authority)的形式。因此,你需要为每个用户分配至少一个权限,否则会导致该错误。 你可以通过在 Spring Security 配置文件为用户指定角色来解决这个问题。例如,如果你的应用程序有一个角色为 ROLE_USER 的用户,你可以将其在配置文件定义为: ``` @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { // ... @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user") .password("password") .authorities("ROLE_USER"); } // ... } ``` 在上面的示例,我们为用户 "user" 指定了角色 "ROLE_USER"。你可以根据你的需要指定更多的用户和角色。 如果你正在使用数据库或其他外部数据源来存储用户数据,则可以在相应的服务类为用户指定角色。例如,如果你正在使用 JPA 来管理用户,则可以在 UserRepository 为用户指定角色: ``` @Repository public interface UserRepository extends JpaRepository<User, Long> { @Query("SELECT u FROM User u WHERE u.username = ?1") User findByUsername(String username); default UserDetails getUserDetails(String username) { User user = findByUsername(username); return org.springframework.security.core.userdetails.User.builder() .username(user.getUsername()) .password(user.getPassword()) .authorities(user.getRoles().stream().map( role -> new SimpleGrantedAuthority(role.getName())).toArray(GrantedAuthority[]::new)) .build(); } } ``` 在上面的示例,我们从 UserRepository 获取用户,并将其角色转换为 Spring Security 所需的权限表示形式。这样,当用户尝试进行身份验证和授权时,Spring Security 就可以正确地识别用户的角色。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值