小编eri*_*ire的帖子

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

我正在尝试将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.xmlhasAuthority('admin')

java spring spring-security spring-annotations

5
推荐指数
2
解决办法
9152
查看次数

vector.into_iter()。filter(some_non_trivial_function).collect()是否可接受

因此,如果我有一个,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)

是否会分配一个新的媒介,然后将原来的向量销毁?有什么更好的方法可以做到这一点?

rust

1
推荐指数
1
解决办法
82
查看次数

标签 统计

java ×1

rust ×1

spring ×1

spring-annotations ×1

spring-security ×1