当前位置: 首页 > 知识库问答 >
问题:

hasRole()在Spring安全不能正常工作[重复]

宗政招
2023-03-14

我尝试在我的应用程序中扮演角色。但我一直有个消息。

    "status": 403,
    "error": "Forbidden",
    "message": "Forbidden",

在数据库中,我有列角色和值USER或ADMIN

重新控制器

@GetMapping(value="/users")
@PreAuthorize("hasRole('ROLE ADMIN')")
public ResponseEntity<List<User>> getAllusers(){
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    System.out.println(authentication.getAuthorities());
    List<User> users = userService.findAll();
    return new ResponseEntity<List<User>>(users, HttpStatus.OK);
}

如果我评论@PreAuthorize系统。出来println(authentication.getAuthorities()) 正确显示“角色管理员”“角色用户”


共有1个答案

仲俊豪
2023-03-14

问题是您以错误的方式创建了权限,在您的情况下,权限应该用ROLE_作为DB角色的前缀,它将是ROLE_ADMINROLE_USER(您错过了下划线)

所以,您的UserDetailsgetAuthorities()实现应该以适当的方式填补这个角色,比如:

@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
    List<SimpleGrantedAuthority> authorities = new ArrayList<SimpleGrantedAuthority>();

    /* this is just a sample , you must implement bringing data from repository then prefix every string with ROLE_ */
    authorities.add(new SimpleGrantedAuthority("ROLE_ADMIN"));
    authorities.add(new SimpleGrantedAuthority("ROLE_USER"));

    return authorities;
}

然后在控制器中,@PreAuthorize(“hasRole('ADMIN')”)应该可以工作(删除角色),也可以使用hasAuthority('ROLE_ADMIN'),

 类似资料:
  • 我在使用Spring Security&Thymeleaf时遇到了一个问题,特别是在尝试使用hasRole表达式时。admin“用户有一个角色”admin“,但在尝试时解析为false 我得HTML: 结果如下: 我已经在security.xml文件中启用了use-expressions 并且在我的配置中包含了SpringSecurityDiscuale 而具有一组 为什么不起作用? 我很感激你的

  • 尝试在调用以下命令时保护spring Actuctor服务/管理上下文路径: http://localhost:9091/manage/metrics 在yalm.properties中使用此配置 。 带有安全执行器服务层Git分支 Spring Security配置: '@override protected void configure(HttpSecurity http)引发异常{

  • 有的安全措施起作用,有的不起作用。 如果我的html文件中包含以下内容: 结果是: (->但它不起作用,因为每个人都可以一直看到它) (->按预期工作) (->有效) (->正确) 正如你所看到的,其他人根本没有出现。 html标记如下所示: 我的pom.xml具有以下依赖关系: 我的SecurityConfig如下所示: 所以基本上只要和角色没有任何关系,一切都是正常的。如果它是基于角色的,那么

  • null 获取http://localhost:8888/image-service/default: 获取http://localhost:8888/image-service/prod 我在REST应用程序中激活了配置文件,但始终显示默认配置文件中的值。

  • 在过去的几天里,我一直在进行故障排除,我似乎无法让表达式hasRole工作。我使用的是sping-Security 4.0.1 我的Spring Securityxml 我的所有角色都存储在数据库中,其模式类似于此链接中的1。在自定义的userDetailService中,我将从数据库中加载它。我的角色价值观是这样的 我甚至试着加上前缀“ROLE\uux”,但我似乎无法实现。 下面是关于如何使用h

  • 我的spring security xml 我的所有角色都存储在数据库中,并且有一个类似于此链接中的1的模式。在我的自定义中,我将从数据库加载它。我的角色价值观是这样的 我甚至尝试过把前缀“role_”,但我似乎不能让它工作。