SpringSecurity注解的使用
@Secured
判断用户具有某个角色,只有具有相应角色才可以调用方法
-
开启注解功能
使用注解先要开启注解功能!可以在启动类上,也可以在配置类上添加
@EnableGlobalMethodSecurity(securedEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter {
-
在控制器方法上添加注解
@GetMapping("update") @Security({"ROLE_sale", "ROLE_manager"}) public String update(){
判断是否具有角色,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_",因为在源码中SpringSecurity对hasRole方法做了如下处理
@PreAuthorize
在进入方法前进行权限验证
-
开启方法前后验证注解
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
也就是
prePostEnable = true
-
在控制器方法上面添加注解
@GetMapping @PreAuthorize("hasAnyAuthority('admin')") public String update(){
@PostAuthorize
在进入方法后进行权限验证
-
开启验证注解,同上
-
在控制器方法上面添加注解
@GetMapping @PostAuthorize("hasAnyAuthority('admin')") public String update(){
@PreFilter
进入控制器之前对数据进行过滤
@GetMapping
@PostAuthorize("hasAnyAuthority('admin')")
@PreFilter(value = "filterObject.id%2==0")
public String update(@RequestBody List<UserInfo> list){
list.forEach(t -> {
System.out.println(t.getId() + ":" + t.getName());
})
上述注解的作用就是,如果 UserInfo 的 id 能被 2 整除,就传递 list 中
@PostFilter
@GetMapping
@PostAuthorize("hasAnyAuthority('admin')")
@PreFilter(value = "filterObject.username=='admin'")
public String update(@RequestBody List<UserInfo> list){
ArrayList<User> list = new ArrayList<>();
list.add(new User(1, "admin"));
list.add(new User(1, "user"));
return list
}
上述注解的作用就是,留下 list 中 username 为 admin 的对象
作者:
贺墨于
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。