gpt4 book ai didi

java - Spring security 4 @PreAuthorize(hasAuthority()) 访问被拒绝

转载 作者:搜寻专家 更新时间:2023-11-01 01:41:03 33 4
gpt4 key购买 nike

我正在尝试将 Spring Security 3 @Secured("admin") 注释转换为 Spring Security 4 兼容方式。

这是我的usersService.java

@PreAuthorize("hasAuthority('admin')")
public List<User> getAllUsers() {
return usersDao.getAllUsers();
}

然后在 security-context.xml 我有:

<security:intercept-url pattern="/admin" access="permitAll" />
...
<security:global-method-security pre-post-annotations="enabled" />

getAllUsers()LoginController.java

调用
@RequestMapping("/admin")
public String showAdmin(Model model) {
List<User> users = usersService.getAllUsers();

model.addAttribute("users", users);

return "admin";
}

在mySql数据库中,有两张表,users和authorities。 authorities 有两列,用户名和权限。 administrator 拥有 admin 权限。

现在,如果我尝试访问 /admin,我将被重定向到 /login,但是在我使用 administrator 登录后,我仍然得到“访问被拒绝”。

我想我一定错过了一些非常基本的东西,但由于我是 Spring 的新手,我无法弄清楚。任何帮助,将不胜感激。谢谢。

更新:我尝试将注释更改为@PreAuthorize("hasRole('ROLE_ADMIN')") 并且我还将 mySql 中的管理员的“权限”列从“admin”更改为“ROLE_ADMIN”,但它仍然给我 403 . 我对此没有太大的信心,因为在这个错误之前,我不得不将 securityContext.xml 中的 hasRole('admin') 更改为 hasAuthority('admin ').

最佳答案

虽然晚了,但是

hasRole(...) 为内容设置前缀 - 默认为 ROLE_

hasAuthority(...) 检查内容WITHOUT 前缀,即只是纯内容

关于java - Spring security 4 @PreAuthorize(hasAuthority()) 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39313954/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com