自定义注解参数解析器:定义类似通过注解获取对应的参数---登录用户等公用参数
CronJobController
应用:
@ApiOperation(value = "delete job")
@DeleteMapping("/{id}")
public ResponseEntity deleteCronJob(@PathVariable Long id,
@ApiIgnore @CurrentUser User user,
HttpServletRequest request) {
if (invalidId(id)) {
ResultMap resultMap = new ResultMap(tokenUtils).failAndRefreshToken(request).message("Invalid id");
return ResponseEntity.status(resultMap.getCode()).body(resultMap);
}
cronJobService.deleteCronJob(id, user);
return ResponseEntity.ok(new ResultMap(tokenUtils).successAndRefreshToken(request));
}
/**
* @CurrentUser 注解 解析器 需要执行的功能
*/
public class CurrentUserMethodArgumentResolver implements CurrentUserMethodArgumentResolverInterface {
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterType().isAssignableFrom(User.class)
&& parameter.hasParameterAnnotation(CurrentUser.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
return (User) webRequest.getAttribute(Consts.CURRENT_USER, RequestAttributes.SCOPE_REQUEST);
}
}
/**
* 自定义 当前用户 注解
* 注解 参数
* 此注解在验证token通过后,获取当前token包含用户
*/
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface CurrentUser {
}
---mvc上注册解析器
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
@Override
protected void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(currentUserMethodArgumentResolver());
argumentResolvers.add(currentPlatformMethodArgumentResolver());
argumentResolvers.add(requestJsonHandlerArgumentResolver());
super.addArgumentResolvers(argumentResolvers);
}
这里用拦截器设置参数中需要的attr
AuthenticationInterceptor
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
AuthShare authShareMethoed = method.getAnnotation(AuthShare.class);
if (handler instanceof HandlerMethod && null != authShareMethoed) {
if (!StringUtils.isEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) {
String username = tokenUtils.getUsername(token);
User user = userService.getByUsername(username);
request.setAttribute(Constants.CURRENT_USER, user);
}
return true;
}
}
相关推荐
这个一个自定义注解实现给注解传递伪动态参数的小案例,可以在此自定义注解的基础上来记录接口的调用记录。
java 元注解+拦截器实现自定义注解 @CmwAutoWired:自定义依赖注入 注意:注入的接口和实现类需要在同一包名下,注解的是类则无限制 @FieldAnnotation:自定义属性注解 @MethodAnnotation:自定义方法注解 @...
在spring环境中通过component-scan配置处理自定义java注解
看到别的博主写的几篇接绍注解相关的东西,觉得挺好的,mark一下 概述及JDK自带注解:...主要就是自定义了注解,使用了自定义注解,然后利用java的反射机制根据注解生成不同的sql语句
自定义注解和通过反射获取注解
Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rar Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rar Java开发案例-springboot-23-自定义注解...
自定义注解,与注解解释器,并且实例化使用注解的类
自定义注解得使用,模拟spring通过注解方式创建bean实例!
java 自定义注解验证 可自己添加所需要的注解,本案例中只写了三个自定义注解类 本案例只花了半天时间,如有不好之处请多提提意见。谢谢!
自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回...
springboot自定义注解的demo;通过本案例实现了通过...通过拦截器获取指定方法上的自定义的注解,然后判断当前的接口需不要权限校验;然后通过对应的访问去处理;demo里面的代码简单;文档齐全,初学者秒懂.本文一篇文章搞定
简单demo,导入即可运行。
spring中自定义注解(annotation)与AOP中获取注解.通过实例演示自定义注解。
自定义注解:SpringBoot中针对SpringMvc自定义注解获取用户登陆信息
excel导入动态校验,自定义注解动态校验
# 自定义注解的规则: - 1.定义注解 - 2.定义注解的切面 - 3.使用注解
自定义注解实现拦截sql,并在sql中增加相应的条件 。 对应博客: https://blog.csdn.net/qq_37716298/article/details/120659139
有备注,有实例,下载就会用
通过注解来配置和参数化框架,指示特定行为或属性的设置。 自动生成文档或测试报告的过程中,使用注解提取重要信息或生成相关文档。 运行时处理的过程中,通过注解获取元数据并执行相应的操作。 目标: Java注解的...
包括Java自定义注解以及包括自定义注解的应用实例。以及注解相关知识的注解