我正在尝试将Spring Security 3 @Secured(“ admin”)注释转换为与Spring Security 4兼容的方式。
这是我的 usersService.java
@PreAuthorize("hasAuthority('admin')")
public List<User> getAllUsers() {
return usersDao.getAllUsers();
}
Run Code Online (Sandbox Code Playgroud)
然后在security-context.xml我有:
<security:intercept-url pattern="/admin" access="permitAll" />
...
<security:global-method-security pre-post-annotations="enabled" />
Run Code Online (Sandbox Code Playgroud)
getAllUsers() 被一个叫 LoginController.java
@RequestMapping("/admin")
public String showAdmin(Model model) {
List<User> users = usersService.getAllUsers();
model.addAttribute("users", users);
return "admin";
}
Run Code Online (Sandbox Code Playgroud)
在mySql数据库中,有两个表,用户表和权限。authorities有两列,用户名和权限。administrator有权力admin。
现在,如果我尝试访问/admin,我将被重定向到/login,但是使用登录后administrator,我仍然会收到“访问被拒绝”的信息。
我想我一定错过了一些非常基本的东西,但是由于我是Spring的新手,所以我无法弄清楚。任何帮助,将不胜感激。谢谢。
更新:我尝试将注释更改为@PreAuthorize(“ hasRole('ROLE_ADMIN')”),并且还将mySql中的admin的“ authority”列从“ admin”更改为“ ROLE_ADMIN”,但它仍然给我403。没有这多少信心,因为这个错误之前,我不得不改变hasRole('admin')在securityContext.xml给hasAuthority('admin')。
因此,如果我有一个,mut v: Vec<Foo>并且我只想保留那些活着的
我会做
v = v.into_iter().filter(|&foo| non_trivial_function_returning_a_result(foo).is_ok()).collect()
Run Code Online (Sandbox Code Playgroud)
是否会分配一个新的媒介,然后将原来的向量销毁?有什么更好的方法可以做到这一点?