[SpringSecurity]web权限方案_用户授权_注解使用
Posted 唐火
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[SpringSecurity]web权限方案_用户授权_注解使用相关的知识,希望对你有一定的参考价值。
注解使用
@Secured
判断用户是否具有角色,可以访问方法,另外需要注意的是这里匹配的字符串需要添加前缀“ROLE_“。
使用注解先要开启注解功能!
启动类(配置类)开启注解
- @EnableGlobalMethodSecurity(securedEnable = true)
在controller的方法上面使用注解,设置角色
@RestController
@RequestMapping("/test")
public class TestController
@GetMapping("hello")
public String hello()
return "hello security";
@GetMapping("index")
public String index()
return "hello index";
@GetMapping("update")
@Secured("ROLE_sale","ROLE_manager")
public String update()
return "hello update";
userDetailsService设置用户角色
测试
@PreAuthorize
适合进入方法前的权限验证
启动类开启注解
在controller的方法上面添加注解
userDetailsService设置用户角色
测试
@PostAuthorize
在方法执行后再进行权限验证,适合验证带有返回值的权限.
开启注解
- @EnableGlobalMethodSecurity(prePostEnabled = true)
在controller的方法上面添加注解
测试
可以看到没有访问权限,但是控制台还是输出了update…,说明在方法执行后再进行权限验证!
@PostFilter
- 方法返回数据进行过滤
@PostFilter :权限验证之后对数据进行过滤 留下用户名是 admin1 的数据
表达式中的 filterObject 引用的是方法返回值 List 中的某一个元素
测试
package com.atguigu.securitydemo1.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Users
private Integer id;
private String username;
private String password;
@GetMapping("getAll")
@PostAuthorize("hasAnyAuthority('admins')")
@PostFilter("filterObject.username == 'admin1'")
public List<Users> getAllUser()
ArrayList<Users> list = new ArrayList<>();
list.add(new Users(11,"admin1","6666"));
list.add(new Users(21,"admin2","888"));
System.out.println(list);
return list;
@PreFilter
- 传入方法数据进行过滤
@PreFilter: 进入控制器之前对数据进行过滤
以上是关于[SpringSecurity]web权限方案_用户授权_注解使用的主要内容,如果未能解决你的问题,请参考以下文章
[SpringSecurity]web权限方案_CSRF功能
[SpringSecurity]web权限方案_用户授权_基于权限访问控制_基于角色访问控制_hasAuthority和hasAnyAuthority_hasRole和hasAnyRole
[SpringSecurity]web权限方案_用户认证_自定义用户登录页面
[SpringSecurity]web权限方案_用户授权_注解使用