SpringBoot实现自定义Token注解(仅限于添加@RequestBody 方法使用)

SpringBoot实现自定义Token注解(仅限于添加@RequestBody 方法使用)


前言

提示:自定义注解可以使用在业务系统进行对接开发,获取封装公共的API接口等等

提示:以下是本篇文章正文内容,下面案例可供参考

一、自定义注解是什么?

首先看看官方对注解的描述:
An annotation is a form of metadata, that can be added to Java source code. Classes, methods, variables, parameters and packages may be annotated. Annotations have no direct effect on the operation of the code they annotate.
翻译过来的意思是:
注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于它所修饰的代码并没有直接的影响。

二、上代码

1.添加自定义注解

代码如下(示例):

/**
 * Token注解
 *
 * @author SongWei
 * @version 1.0
 * @date 2021/7/16 17:10
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Mapping
@Documented
public @interface TokenParameter {

    /**
     * 入参是否效验Token
     */
    boolean inToken() default true;
}

2.实现RequestBodyAdvice接口

代码如下(示例):

/**
 * 请求数据解密和Token验证
 *
 * @author SongWei
 * @version 1.0
 * @date 2021/7/14 9:06
 */
@Slf4j
@ControllerAdvice(basePackages = "com.xxx.xxx.xxx.controller")
public class AnnotationRequestBodyAdvice implements RequestBodyAdvice {

    @Override
    public boolean supports(MethodParameter methodParameter, Type targetType,
                            Class<? extends HttpMessageConverter<?>> converterType) {
        return true;
    }

    @Override
    public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter methodParameter, Type targetType,
                                           Class<? extends HttpMessageConverter<?>> converterType) {                      
        boolean inToken = false;
        if (methodParameter.getMethod().isAnnotationPresent(TokenParameter.class)) {
            //获取注解配置的包含和去除字段
            TokenParameter tokenParameter = methodParameter.getMethodAnnotation(TokenParameter.class);
            //方法是否需要验证Token
            inToken = tokenParameter.inToken();
        }

        //Token是否开启验证
        if (inToken) {
            //编写需要实现的业务代码
        }
        return inputMessage;
    }

    @Override
    public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType,
                                Class<? extends HttpMessageConverter<?>> converterType) {
        return body;
    }

    @Override
    public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter,
                                  Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
        return body;
    }
}

3.注解用法,测试示例

代码如下(示例):
我们只需要在方法上添加上 @TokenParameter 这个注解就OK了

/**
 * @author SongWei
 * @version 1.0.0
 * @ClassName TestController.java
 * @Description 测试用例
 * @createTime 2021年09月02日 17:03:00
 */
@RestController
@RequestMapping("/token")
public class TestController {

    @PostMapping("/testToken")
    @ResponseBody
    @TokenParameter
    public Object testToken(@RequestBody Map<String, Object> map) {
        return JSON.toJSONString(map);
    }
}
没有加Token的失败返回:

在这里插入图片描述

添加Token的正确返回:

在这里插入图片描述


总结

提示:这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了Post请求下验证Token的使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值