注:本文基于Spring Boot 3.2.1 以及 Spring Security 6.2.1
Spring Security 6 的常用注解包括以下几种,通过这些注解可以更加方便的控制资源权限。
@Secured :方法执行前检查,直接判断有没有对应的角色
@PreAuthorize:方法执行前检查,根据SpEL表达式执行结果判断是否授权
@PostAuthorize:方法执行后检查,根据SpEL表达式执行结果判断是否授权
要使用以前注解必须增加配置,开启校验功能
// 用于启用方法级别的安全支持
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)
@Secured
方法执行前检查,直接判断有没有对应的角色
示例代码:
@Secured({
"ROLE_USER" })
public void create(Contact contact);
@Secured({
"ROLE_USER", "ROLE_ADMIN" })
public void update(Contact contact);
@Secured({
"ROLE_ADMIN" })
public void delete(Contact contact);
@PreAuthorize
方法执行前检查,根据SpEL表达式执行结果判断是否授权
示例代码:
// 有角色
@PreAuthorize("hasRole('ROLE_ADMIN')")
// 有任一角色
@PreAuthorize("hasAnyRole({'ROLE_USER','ROLE_ADMIN'})")
// 有任一权限
@PreAuthorize("hasAnyAuthority({'user:search','user:edit'})")
其他用法
@PreAuthorize 参数是SpEL表达式,所以还可以有其他用法
1、方法参数值判断,@PreAuthorize("#age>10")
@GetMapping("/age")
@PreAuthorize("#age>10")
public String age(Integer age) {
return "Hello age "+ age;
}
2、调用bean的方法判断
1)创建Bean,判断是否有权限
@Component("au")
public class AuthUtils {
public boolean check(String role) {
Authentication authentication = SecurityContextHolder.