使用简单的注解切面工程实现接口权限校验

使用简单的注解切面工程实现接口权限校验

需求背景:管理系统使用人员分管理员、业主、普通用户三类,需要在指定接口做权限校验,限制访问或仅可见本人数据。

首先自定义一个注解:

package com.hawk.smartoperation.common;

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

/**
 * @program: smartOperation
 * @description: 权限校验切面注解
 * @author: 作者名字
 * @create: 2021-10-27 16:16
 **/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyPermission {
   

    /**
     * 默认只有USER权限
     * @return
     */
    String[] value() default {
   Constant.USER, Constant.ADMIN, Constant.OWNER};
}

其中类名上方的注解为元注解:jdk自带的注解,用来注解其他注解。

  1. @Target:
    被描述的注解可以用在什么地方,如标识本注解可以使用在类上/方法上。取值(ElementType)有:

1.CONSTRUCTOR:用于描述构造
    2.FIELD:用于描述域
    3.LOCAL_VARIABLE:用于描述局部变量
    4.METHOD:用于描述方法
    5.PACKAGE:用于描述包
    6.PARAMETER:用于描述参数
    7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

  1. @Retention
    被描述的注解在什么范围内有效,如标识本注解在运行期间有效。取值(RetentionPoicy)有:

1.SOURCE:在源文件中有效(即源文件保留)
    2.CLASS:在class文件中有效(即class保留)
    3.RUNTIME:在运行时有效(即运行时保留)

  1. @Documented
    标记注解,表示注解可以被API文档化

  2. @Inherited
    标记注解,如果@Inherited修饰的注解用于一个class,则这个注解可被用于该class的子类。

@interface用来声明一个注解。格式:public @interface 注解名 {定义体}

**注解的属性值:**定义体里,方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。如 :

String value() default “”;

String[ ] value() default {};

我这里定义了接口的默认权限为数组形式,即实际使用时注解参数填入哪些权限标志就表示该接口允许何种权限。

接下来就是注解的内部业务逻辑了:通常都使用doBefore()、doAfter()、doAround()的模式,将判断写在doAround()中。

package com.hawk.smartoperation.common;

import com.hawk.smartoperation.common.commonmodel.CommonResultVO;
import com.hawk.smartoperation.model.PersonnelInfo;
import com.hawk.smartoperation.model.TicketInfoBO;
import com.hawk.smartoperation.service.PersonnelInfoService;
import com.hawk.smartoperation.utils.StringHandleUtils;
import lombok.extern.slf4j.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值