首页 > 其他分享 >自定义注解实现权限校验

自定义注解实现权限校验

时间:2024-11-05 21:35:57浏览次数:2  
标签:自定义 boot 校验 RequiresPermission 注解 权限 public

自定义注解实现权限校验

引入所需的依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>版本号</version>
    <relativePath/>
</parent>
<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-aop</artifactId>
     </dependency>
</dependencies>

自定义注解(RequiresPermission)

import java.lang.annotation.ElementType;  
import java.lang.annotation.Retention;  
import java.lang.annotation.RetentionPolicy;  
import java.lang.annotation.Target;  

@Target({ElementType.METHOD,ElementType.TYPE})// 标识这个注解可以用在方法上
@Retention(RetentionPolicy.RUNTIME)  // 在运行时仍然可以获取到注解
public @interface RequiresPermission {  
    String value();  // 权限标识  
}  

定义AOP切面类

在切面中,我们将使用ProceedingJoinPoint对象来拦截带有@RequiresPermission注解的方法并获取其中的值:

@Aspect  
@Component  
public class PermissionAspect {  
    //需要使用全路径名指定自定义注解
    @Around("@annotation(com.chs.annocation.RequiresPermission)")
    public Object checkPermission(ProceedingJoinPoint joinPoint) throws Throwable {  
        // 获取被调用的方法  
        Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();  
        
        // 获取RequiresPermission注解  
        RequiresPermission requiresPermission = method.getAnnotation(RequiresPermission.class);  

        // 获取权限值  
        String permission = requiresPermission.value();  
        
        // 在这里执行权限检查  
        if (!checkUserPermission(permission)) {  
            throw new SecurityException("权限不足");  
        }  

        return joinPoint.proceed();  // 继续执行被拦截的方法  
    }  

    private boolean checkUserPermission(String permission) {  
        // 权限检查逻辑,返回true或false  
    }  
}  

使用自定义注解的控制器

@RestController  
public class UserController {  

    @GetMapping("/admin")  
    @RequiresPermission("ADMIN")  // 需要ADMIN权限  
    public String adminEndpoint() {  
        return "Welcome to admin area";  
    }  

    @GetMapping("/user")  
    @RequiresPermission("USER")  // 需要USER权限  
    public String userEndpoint() {  
        return "Welcome to user area";  
    }  
}  

注意:记得在主启动类上加:@EnableAspectJAutoProxy

标签:自定义,boot,校验,RequiresPermission,注解,权限,public
From: https://www.cnblogs.com/21CHS/p/18528894

相关文章

  • JackSon的忽略注解
    JackSon的忽略注解在本教程中,我将通过一个示例向您展示如何在使用Jackson@JsonIgnore、@JsonIgnoreProperties和@JsonIgnoreType注释将对象序列化为JSON时忽略某些字段。这些注解用于忽略JSON序列化和反序列化中的逻辑属性@JsonIgnore用于忽略序列化和反序列化中使用的......
  • 为什么同一个类中,不能一个方法调另一个方法,注解会失效?
    在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解是不会生效的。原因:spring在扫描bean的时候会扫描方法上是否包含@Async注解,如果包含,spring会为这个bean动态地生成一个子类(即代理类,proxy),代理类是继承原来那个bean的。此时,当这个有注解的方法被......
  • 手把手教你编写自定义Categraf插件
    本文分享自天翼云开发者社区《手把手教你编写自定义Categraf插件》,作者:任****佳Categraf是一个监控采集Agent,类似Telegraf、Grafana-Agent、Datadog-Agent,希望对所有常见监控对象提供监控数据采集能力,采用All-in-one的设计,不但支持指标采集,也希望支持日志和调用链路的数据采......
  • HarmonyOS 开发实践——基于自定义注解和代码生成实现路由框架
    ......
  • TypeScript中的类型注解、Interface接口、泛型
    一、认识TypeScript1.概述TypeScript是具有类型语法的JavaScript,是一门强类型的编程语言。它是JavaScript的超集(js中的所有元素都属于ts),这意味着任何有效的JavaScript代码本身也是有效的TypeScript代码。2.优点静态类型检查TypeScript在编译阶段就可以检查类......
  • 「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
    自定义组件可以帮助开发者实现复用性强、逻辑清晰的界面模块。通过自定义组件,鸿蒙应用能够提高代码的可维护性,并简化复杂布局的构建。本篇将介绍如何创建自定义组件,如何向组件传递数据,以及如何在不同页面间复用这些组件。关键词自定义组件复用组件属性传递组件通信组件......
  • @DS注解方式springboot多数据源配置及失效场景解决
    1.使用教程导入依赖<!--多数据源--> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.5.0</version> </dependency>123456配置数据源......
  • el-form中循环出来的el-form-item进行校验的设置
    注意的内容点:点击查看代码<templatev-for="(e,index)inappAdnInfo.ext":key="e.name"><el-form-item:label-width="labelWidth":label="e.label":prop="......
  • Android的自定义View和自定义ViewGroup
    Android自定义视图(View)和视图组(ViewGroup)详解在Android开发中,有时候我们需要创建一些标准控件无法满足需求的自定义视图(View)和视图组(ViewGroup)。本文将详细介绍如何创建自定义视图和视图组,包括构造方法、自定义属性、绘制逻辑、测量逻辑、布局逻辑和设置布局参数等内容。1.......