环境:SpringBoot 2.1.5.RELEASE
需求:一些登录用户的信息每次都重复的需要反解token,怎样优雅的注解方式完成登录用户信息获取,利用HandlerMethodArgumentResolver实现注解实现参数注入和解析
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoLoginInfo {
}
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoLoginInfo {
}
@Data
public class LoginInfo implements Serializable {
private String userID;//用户ID
private String clientType;//端类型
private int lessonType;//课程类型
}
@Data
public class UserInfo implements Serializable{
private int lessonNum;
private String classID;
private String clientType;
}
@Component
public class ActionArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
Annotation[] annotations = methodParameter.getParameterAnnotations();
return Stream.of(annotations).allMatch(item ->
AutoUserInfo.class.isInstance(item) ||
AutoLoginInfo.class.isInstance(item)
);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class);
Annotation[] annotations = parameter.getParameterAnnotations();
for (Annotation annotation : annotations) {
if (AutoUserInfo.class.isInstance(annotation)) {
//todo jwt的操作
UserInfo userInfo =new UserInfo();
userInfo.setClassID("666");
userInfo.setLessonNum(1);
userInfo.setClientType("ios");
return userInfo;
} else if (AutoLoginInfo.class.isInstance(annotation)) {
LoginInfo loginInfo =new LoginInfo();
loginInfo.setUserID("888");
loginInfo.setLessonType(1);
loginInfo.setClientType("安卓");
return loginInfo;
}
}
return null;
}
}
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
@Autowired
private AuthInterceptor authInterceptor;
/*进行反注解参数*/
@Autowired
private ActionArgumentResolver actionArgumentResolver;
// @Override
// public void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor(authInterceptor).addPathPatterns("/**").excludePathPatterns("/login").excludePathPatterns("/error");
//
// }
@Override
public void addArgumentResolvers(List argumentResolvers) {
argumentResolvers.add(actionArgumentResolver);
}
}
@GetMapping("car")
@MetricMethodCost(description ="my test")
public Car getMyCar(@AutoLoginInfo LoginInfo loginInfo, @AutoUserInfo UserInfo userInfo) {
System.out.println(loginInfo);
System.out.println(userInfo);
return carService.getCar();
}
页面更新:2024-04-25
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号