多平台统一管理软件接口,如何实现多平台统一管理软件接口
268
2022-12-08
在springboot中使用注解将值注入参数的操作
后端的许多管理系统需要登陆者的信息,如shiro登陆后,会将登陆者的信息存储在shiro的session,在使用时需要多行代码获取用户信息。可以把获取在shiro中的登陆者信息封装在一个类中,使用时获取。本文主要讲述如何使用注解将值注入参数,shiro的配置请自行百度。
定义注解
新建一个InfoAnnotation.java的注解类,用于注解参数,代码如下:
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface InfoAnnotation {
String value() default "userId";//默认获取userId的值
}
定义注解处理类
新建一个InfoResolver类,AOP无法将值注入参数,需要继承HandlerMethodArgumentResolver类,代码如下:
public class InfoResolver implements HandlerMethodArgumentResolver {
//使用自定义的注解
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
return methodParameter.hasParameterAnnotation(InfoAnnotation.class);
}
//将值注入参数
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
//获取捕获到的注解
InfoAnnotation annotation = methodParameter.getParameterAnnotation(InfoAnnotation.class);
String value = annotation.value();
//获取需要注入值得逻辑
//该例子在shiro中获取userId或者用户信息
if (value == null || "".equalsIgnoreCase(value) || value.equalsIgnoreCase("userId")){
User user = (User)SecurityUtils.getSubject().getSession().getAttribute("user");
if (user == null){
return 1;
}
return user.getId();
} else if ("user".equalsIgnoreCase(value)){
return SecurityUtils.getSubject().getSession().getAttribute("user");
}
return value;
}
}
使springboot支持该拦截器
修改启动类,继承WebMvcConfigurationSupport类,添加自定义得拦截器,代码如下:
@SpringBootApplication
public class DemoApplication extends WebMvcConfigurationSupport {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
//添加自定义的拦截器
@Override
public void addArgumentResolvers(List
super.addArgumentResolvers(argumentResolvers);
argumentResolvers.add(new InfoResolver());
}
}
测试
测试用例,如下代码
@GetMapping
public BaseResponse> test(@InfoAnnotation int userId){
return ResponseUtil.successResponse(userId);
}
登陆返回的信息
调用测试用例返回的信息
可以看到登陆返回的用户信息的id和测试用例返回的data一致。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~