注解+切面+token实现用户code参数注入

        在日常开发过程中,尤其是后台管理系统开发新增、编辑、删除等功能时需要存入操作人信息字段(createBy、updateBy),那么在接口中需要传入编辑人信息,这会使得开发任务变得很繁重,下面就给大家介绍一种运用切面+注解的方式实现快捷用户信息获取方法。

        首先我们知道操作数据的接口为了安全性一定需要验签(token或者其他验证方式),而签证内又可以放入用户信息,所以我们可以通过在签证内放入用户信息,然后直接获取签证内的用户数据,所以今天介绍直接获取token内存入的用户信息注入到参数字段

1、定义@SetCode注解,该注解使用在字段上,该注解仅可在controller层使用

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

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface SetCode {}

2、对使用了@SetCode注解的参数进行赋值操作,这里我们可以用到切面方法对方法内部的字段参数进行修改赋值;有兴趣的可以去看看切面AOP相关内容

注:该切面我是通过自定义@Token注解判断是否需要传入token作为判断依据,直接拦截使用了@Token注解的方法

@Aspect
@Component
public class Aop {

    @Resource
    private HttpServletRequest request;

    @Resource
    private JwtUtil jwtUtil; // jwtUntil工具类,主要是解析token,获取token存放的用户信息


    /**
     * 赋值于userCode信息,用于更新数据库时插入创建人或更新人
     * @param pjp
     * @return
     * @throws Throwable
     */
    @Around("@annotation(com.wm.auth.Token)") //切面将要拦截使用了@Token注解的方法(这个可以根据自己的需求使用,可以是注解,可以是方法,也可以是类)
    public Object changeValue(ProceedingJoinPoint pjp) throws Throwable  {
        MethodSignature methodSignature = (MethodSignature) pjp.getSignature();
        Method method = methodSignature.getMethod();
        Parameter[] parameters = method.getParameters();
        Object[] args = pjp.getArgs();
        for (int i = 0; i < args.length; i++) {
            /*找到要修改的参数实体*/
            boolean annotationPresent = parameters[i].isAnnotationPresent(SetCid.class);
            if (annotationPresent) {
                //这儿是获取token内存放的用户信息,根据自己的需要获取就行
                int cid = Integer.parseInt(jwtUtil.parseToken(request.getHeader("Authorization")).get("cid").toString().replace("\"",""));
                args[i] = cid; //赋值,获取方法的传入的参数,然后赋值给该参数
            }
        }
        return pjp.proceed(args); 
    }

}

3、使用(因为要搭配@Token注解,所以只能在controller层使用)

    @Token //该注解解释了该方法必须要传Token
    @GetMapping("/test")
    public Result test(@RequestParam(required = false) @SetCode Integer code) {           
        return Result.success(code);
    }

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二九筒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值