我正在尝试将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
。
答案 0 :(得分:5)
尽管已经很晚了,但
PublicEntityName
为内容设置前缀 - 默认值为PublicCollectionName
hasRole(...)
检查内容没有前缀,即只是纯内容
答案 1 :(得分:2)
试试这个@PreAuthorize("hasRole('ROLE_ADMIN')")
答案 2 :(得分:1)
您应该添加Spring安全性
@EnableGlobalMethodSecurity(prePostEnabled = true)