java获取⾃定义参数类型_Springboot中使⽤⾃定义参数注解获
取token中⽤户数据...
使⽤⾃定义参数注解获取 token 中User数据
使⽤背景
在springboot项⽬开发中需要从token中获取⽤户信息时通常的⽅式要经历⼏个步骤
中截获token
TokenUtil⼯具类解析token中的⽤户信息
把解析结果存⼊到成员变量中
controller中通过TokenUtil⼯具类提供的静态⽅法获取⽤户信息
下⾯是过程⽰例代码
/*--------1.中获取---------*/
String token =Header("token")
/*--------2.解析---------*/
//如果没过期且有效
if(!TokenUtil.isExpire(token)){
//解析token把结果存⼊成员变量
TokenUtil.decode(token);
}
/*--------3.controller中获取---------*/
User User();
看上去也没什么复杂指处,但是如果在每个Controller中都加上⼀句
User User();感觉有些多余(潜意识知道肯定有更简洁的⽅法能减少这⾥所写代码)
下⾯介绍⼀种使⽤⾃定义参数注解的⽅法简化获取结果
最后预期达到的效果
@{RequestMethod}Mapping(value="path")
public Object methodName(@CurrentUser User user){
//...code
}
正⽂开始
1. 中的代码(GlobalInterceptor.java)
public class GlobalInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String Header("token");
//判断路径需要拦截
//....code
//如果token有效
if(!TokenUtil.isExpire(token)){
User user = User(token);
//我们将解析的⽤户结果先放⼊session中
}
return true;
}
}
2. 注解类 (CurrentUser.java)
@Target({ElementType.PARAMETER})//Annotation所修饰的对象范围:⽅法参数
@Retention(RetentionPolicy.RUNTIME)//Annotation被保留时间:运⾏时保留(有效)
@Documented//标记注解:java⼯具⽂档化
public @interface CurrentUser {
}
3. CurrentUser注解实现类(CurrentUserHandlerMethodArgReslover.java)
public class CurrentUserHandlerMethodArgReslover implements HandlerMethodArgumentResolver {
/**
* 判断是否⽀持使⽤@CurrentUser注解的参数
*/
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
//如果该参数注解有@CurrentUser且参数类型是User
ParameterAnnotation(CurrentUser.class) != null &&ParameterType() == User.class;
}
/**
* 注⼊参数值
*/
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
//取得HttpServletRequest
HttpServletRequest request= (HttpServletRequest) NativeRequest(); //取出session中的User
return (Session().getAttribute("currentUser");
}
}
4. 在SpringBoot启动类中注册 注解的实现类与(ServerApplication.java)
@SpringBootApplication
public class ServerApplication extends WebMvcConfigurationSupport {
jquery框架定义
/
**
* 启动⼊⼝
* @param args
*/
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class,args);
}
@Override
protected void addArgumentResolvers(List argumentResolvers){
//注册@CurrentUser注解的实现类
argumentResolvers.add(new CurrentUserHandlerMethodArgReslover());
}
/**
* 注册
* @param registry
*/
@Override
protected void addInterceptors(InterceptorRegistry registry {
//注册
registry.addInterceptor(new GlobalInterceptor().addPathPatterns("/*/api/**");
registry.addInterceptor(new TestInterceptor().addPathPatterns("/*/api/test/**");
super.addInterceptors(registry);
}
}
5. 在Controller中使⽤
@GetMapping(value="/demo/api/testget")
public Object getTest(@CurrentUser User currentUser){
System.out.println(currentUser);
return currentUser;
}
到此就实现了预期的结果,回头看发现虽然多写了不少代码,但是在⽤的时候还是更加简洁明了,美丽⼤⽅(给⾃⼰⽐个❤)
SpringBoot版不需要配置⽂件注解获取当前登录⽤户
本⽂讯(2019年3⽉30⽇ 飞快的蜗⽜博客)  我是⼀个懒⼈,很久不写博客,想起来看到也不⼀定会写,只有⼼⾎来潮的时候写写,"钱塘江上潮信来,今⽇⽅知我是我"...... 空杯 ...
Spring boot中普通⼯具类不能使⽤@Value注⼊yml⽂件中的⾃定义参数的问题
在写⼀个⼯具类的时候,因为要⽤到yml中的⾃定义参数,使⽤@Value发现值不能正常注⼊,都显⽰为null: yml⽂件中的⾃定义格式 调⽤⼯具类的时候不能new的⽅式 要使⽤@Autowired的⽅ ...
[转]Java中实现⾃定义的注解处理器
Java中实现⾃定义的注解处理器(Annotation Processor) 置顶2016年07⽉25⽇ 19:42:49 阅读数:9877 在之前的
传递多个参数并获取Web API的数据
近段时间学习Web Api觉得⾮常有意思.默认的路由情况之下,获取数据时,它不必指定Action操作名. 还有另外感想,就是⾃从学习asp MVC之后,加上jQuery,让Insus.NET已 ...
jQuery遍历table中的tr td并获取td中的值
jQuery遍历table中的tr td并获取td中的值 $(function(){ $("#tableId tr").find("td").each(func ...
[K/3Cloud] 动态表单打开时传递⼀个⾃定义参数并在插件中获取
插件中在调⽤动态表单时,通过DynamicFormShowParameter的CustomParams,增加⾃定义的参数. /// /// 库存查询 /// ...
SpringMVC中post请求参数注解@requestBody使⽤问题
SpringMVC中的⾃定义参数绑定案例
由于⽇期数据有很多种格式,所以springmvc没办法把字符串转换成⽇期类型.所以需要⾃定义参数绑定.前端控制器接收到请求后,到注解形式的处理器适配器,对RequestMapping标记的⽅法进⾏适 ...
XAF 框架中,⾃定义参数动作(Action),输⼊参数的控件可定义,⽤于选择组织及项⽬
随机推荐
Sed、Awk单⾏脚本快速参考
⽂本间隔: # 在每⼀⾏后⾯增加⼀空⾏ sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空⾏删除并在每⼀⾏后⾯增加⼀空⾏. # 这样在输出的⽂本 ...
1、C&num;基础:变量、运算符、分⽀、循环、枚举、数组、⽅法 <&semi;转>;
CSS样式----图⽂详解(⼆):css属性
主要内容 CSS的单位 字体属性 ⽂本属性 背景属性 列表属性 盒⼦模型 定位属性:position.float.overflow.z-index等 导航栏的制作 ⿏标的属性cursor 滤镜的介绍 ...
Pixar Shorts ⽪克斯动画短⽚全集
[原创短⽚](Theatrical Shorts)16部 < ...
eclipse +VISUALSVN SERVER 创建版本控制器,防⽌误操作(可视化操作,简单⽅便,不需要修改配置⽂件)
移植net-snmp到开发板(mini210)
1.安装交叉编译⼯具arm-linux-gcc
2.下载net-snmp源码安装包
3.解压安装包
4../configure --build=i686-linux --host=arm-linux ...
codeforces 675B B. Restoring Painting&lpar;暴⼒枚举)
题⽬链接: B. Restoring Painting time limit per test 1 second memory limit per test 256 megabytes input s ...
Linq101-Miscellaneous
using System; using System.Collections.Generic; using System.Linq; namespace Linq101 { class Miscell ...
js中document的⽤法
document.title //设置⽂档标题等价于HTML的title标签document.bgColor //设置页⾯背景⾊document.fgColor //设置前景⾊(⽂本颜⾊)docume ...
详细解析BluetoothAdapter的详细api
(1)开关状态值 (2)扫描状态值 (3)蓝⽛操作接收的⼴播 (4)蓝⽛操作请求的⼴播 (5)附加域 (6)错误码 (1)获取蓝⽛适配器 (2)获取state状态⽅法 (3)蓝⽛是否可⽤ (4)打开蓝 ...

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。