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

时间:2016-09-04 05:53:57

标签: java spring spring-security spring-annotations

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

这是我的@RequestParam

usersService.java

然后在@PreAuthorize("hasAuthority('admin')") public List<User> getAllUsers() { return usersDao.getAllUsers(); } 我有:

security-context.xml
{p> <security:intercept-url pattern="/admin" access="permitAll" /> ... <security:global-method-security pre-post-annotations="enabled" /> getAllUsers()

调用
LoginController.java

在mySql数据库中,有两个表,用户和权限。 @RequestMapping("/admin") public String showAdmin(Model model) { List<User> users = usersService.getAllUsers(); model.addAttribute("users", users); return "admin"; } 有2列,用户名和权限。 authorities有权限administrator

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

我想我一定错过了一些非常基本的东西但是因为我是Spring的新手,我无法理解。任何帮助,将不胜感激。感谢。

更新:我尝试将注释更改为@PreAuthorize(“hasRole('ROLE_ADMIN')”)并且我还将mySql中的“权限”列从“admin”更改为“ROLE_ADMIN”,但它仍然给了我403我对此并不太信任,因为在此错误之前,我必须将administrator中的hasRole('admin')更改为securityContext.xml

3 个答案:

答案 0 :(得分:5)

尽管已经很晚了,但

PublicEntityName为内容设置前缀 - 默认值为PublicCollectionName

hasRole(...)检查内容没有前缀,即只是纯内容

答案 1 :(得分:2)

试试这个@PreAuthorize("hasRole('ROLE_ADMIN')")

答案 2 :(得分:1)

您应该添加Spring安全性

@EnableGlobalMethodSecurity(prePostEnabled = true)