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的使用