Spring Security 6.2.x 常用注解

教程分享 > Java教程 > Spring (115) 2024-08-19 14:45:48

环境

JDK 17

  • Spring Boot 3.2.1-3.3.2
  • Spring Security 6.2.1-6.3.1

Spring Security 权限/角色常用注解

  • @Secured :方法执行前检查,直接判断有没有对应的角色
  • @PreAuthorize:方法执行前检查,根据SpEL表达式执行结果判断是否授权
  • @PostAuthorize:方法执行后检查,根据SpEL表达式执行结果判断是否授权

要使用以前注解必须增加配置,开启方法安全校验功能

配置参考1

@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true)

配置参考2

@EnableMethodSecurity(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);

解说:

  • 第一个判断必须要有ROLE_USER角色才能操作;
  • 第二个判断需要有ROLE_USE+ROLE_ADMIN才能操作
  • 第三个判断需要有ROLE_ADMIN角色才能操作

 

@PreAuthorize

方法执行前检查,根据SpEL表达式执行结果判断是否授权

代码聚焦

// 有角色ROLE_ADMIN
@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.getContext().getAuthentication();
       if (authentication.getAuthorities().stream()
               .map(GrantedAuthority::getAuthority)
               .noneMatch(role::equals)) {
           throw new AccessDeniedException("User does not have the required permission");
       }
       return true;
   }
}

2)在方法上使用,@PreAuthorize("@au.check('ROLE_USER')")

@GetMapping("/user_au")
@PreAuthorize("@au.check('ROLE_USER')")
public String user_au() {
   return "Hello user_au";
}

@PreAuthorize配合使用的方法定义在 org.springframework.security.access.expression.SecurityExpressionOperations

Spring Security 6.2.x 常用注解_图示-6df8724a51f44f8883d36c0fe52a716e.png

 

 

https://www.leftso.com/article/2408191355278391.html

相关文章
环境JDK 17Spring Boot 3.2.1-3.2.3Spring Security 6.2.1-6.3.1Spring Security 权限/角色常
前言使用Spring Boot 3 Security 6.2 JWT 完成无状态的REST接口认证和授权管理。环境JDK 17Spring Boot 3.3.2
spring boot 2.0 security 5.0 整合,实现自定义表单登录。spring boot 2.0框架使用。
Spring Security 配置多个Authentication Providers认证器
spring security常用注解@Secured、@PreAuthorize 、@PostAuthorize说明,Java编程,spring security
解决spring security 整合到spring boot中,UserDetailsService接口的loadUserByUsername方法参数username输入为空问题。一  检查...
引言在这篇文章中,我们将讨论如何使用Spring Boot Security OAuth2保护REST API
spring boot 入门之security oauth2 jwt完美整合例子,Java编程中spring boot框架+spring security框架+spring security o...
Java编程中spring security4是一个spring框架项目的一个安全方面的项目。主要用于用户认证,授权,角色认证
1.概述本文继续使用spring boot 和Spring Security系列进行注册,并着重于如何正确实现角色和权限
使用OAuth2安全的Spring REST API,Secure Spring REST API using OAuth2(含demo代码下载)
引言在本文中,我们将讨论有关Spring启动安全性和JWT令牌的OAUTH2实现以及保护REST API
spring boot 整合spring security采用mongodb数据库方式
本文主要翻译spring官方的基于spring security框架的oauth2开发指南,spring,oauth2,spring框架,Java编程