`
y806839048
  • 浏览: 1126341 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

自定义注解参数解析器:定义类似通过注解获取对应的参数---登录用户等公用参数

阅读更多

 

自定义注解参数解析器:定义类似通过注解获取对应的参数---登录用户等公用参数

 

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;

        }

}

 

分享到:
评论

相关推荐

    自定义注解实现伪动态传参的小demo

    在这个“自定义注解实现伪动态传参的小demo”中,我们将探讨如何创建一个自定义注解,以允许在注解中传递类似于动态参数的数据。 首先,自定义注解的定义通常以`@interface`关键字开始,我们可以定义一些元素(也...

    Spring 自定义注解的解析

    在Spring框架中,自定义注解的解析是一个强大的特性,允许开发者根据业务需求创建特定的注解,并在Spring容器启动时自动处理这些注解。本文将深入探讨如何在Spring环境中通过`component-scan`配置来处理自定义Java...

    Java自定义注解使用反射获取字段注解

    本文将深入探讨如何通过反射机制来获取自定义注解以及其在字段上的应用。 首先,我们需要了解什么是自定义注解。自定义注解是以`@`开头,后跟自定义的名称。定义一个注解的基本结构如下: ```java import java....

    Spring boot 自定义参数解析器

    通过自定义参数解析器,Spring Boot可以更好地满足项目中对参数处理的特殊需求,增强系统的灵活性和可扩展性。这个过程涉及到Spring的AOP(面向切面编程)和IoC(控制反转)理念,使得我们可以专注于业务逻辑,而不...

    spring中自定义注解(annotation)与AOP中获取注解

    通过这种方式,我们可以在AOP中灵活地处理带有自定义注解的方法,实现如日志记录、性能监控、权限验证等多种功能。这不仅提高了代码的复用性,也使得业务逻辑更加清晰。 总结来说,Spring中的自定义注解和AOP的结合...

    java 元注解+拦截器实现自定义注解.rar

    java 元注解+拦截器实现自定义注解 @CmwAutoWired:自定义依赖注入 注意:注入的接口和实现类需要在同一包名下,注解的是类则无限制 @FieldAnnotation:自定义属性注解 @MethodAnnotation:自定义方法注解 @...

    java自定义注解实践

    例如,我们可以使用自定义注解来描述方法的参数信息,以便在运行时获取这些信息。 ```java @Sample(value="I'm here.") public void anyName() { // ... } ``` 在上面的例子中,我们使用了 `Sample` 注解来描述 `...

    springmvc自定义属性编辑器和参数解析器

    Spring MVC提供了一系列内置的解析器,如ModelAttributeArgumentResolver用于处理`@ModelAttribute`注解的参数,RequestParamMethodArgumentResolver处理`@RequestParam`注解的参数等。如果你需要处理自定义的参数...

    自定义校验注解框架(validator)

    通过自定义注解框架,我们可以轻松地扩展新的校验规则,只需定义新的注解和对应的校验器即可。同时,该框架可以与其他验证库如Hibernate Validator集成,以利用其丰富的校验功能。 综上所述,自定义校验注解框架...

    实现生成自定义注解的实体类

    自定义注解的定义类似于接口,但以`@interface`关键字开头。下面是一个简单的自定义注解示例: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface MyEntity { String ...

    java自定义注解和通过反射获取注解

    Java自定义注解和通过反射获取注解是Java编程中重要的高级特性,它们极大地增强了代码的可读性和可维护性。注解(Annotation)是一种元数据,提供了在编译时和运行时对代码进行标记的方法,而反射(Reflection)则是...

    excel导入动态校验,自定义注解动态校验

    自定义注解动态校验则是在编程环境中,通过使用自定义注解来定义数据验证规则。注解是一种元数据,可以提供有关代码的附加信息,通常用于简化代码并提高可读性。在导入Excel数据时,开发者可以创建自定义注解,这些...

    java 自定义注解验证

    Java 自定义注解验证是Java开发中的一个重要特性,它允许开发者创建自己的元数据,以便在编译时或运行时对代码进行验证和处理。自定义注解为代码提供了额外的信息,使得程序更具可读性、可维护性和灵活性。在本案例...

    aixos-ts-encapsulation_自定义注解_

    1. **自定义注解**:在TypeScript中,自定义注解通过使用`@decorator`语法实现,其中`decorator`是一个函数,它接收类、方法、访问器、构造函数或参数作为参数。例如,你可以定义一个名为`Singleton`的装饰器,它会...

    java 自定义注解例子

    自定义注解的定义类似于接口,但使用`@interface`关键字。例如,我们可以定义一个`@SoldOut`注解,表示某种商品售罄: ```java import java.lang.annotation.Retention; import java.lang.annotation....

    自定义注解实现

    看到别的博主写的几篇接绍注解相关的东西,觉得挺好的,mark一下 概述及JDK自带注解:...主要就是自定义了注解,使用了自定义注解,然后利用java的反射机制根据注解生成不同的sql语句

    Java自定义注解实例

    1. **创建**: 自定义注解通过定义一个接口实现,接口的名字即为注解的名字。例如: ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String ...

    SpringMvc自定义注解获取用户登陆信息.rar

    本示例聚焦于如何通过自定义注解来获取用户登录信息,以增强应用的安全性和用户体验。下面将详细阐述这个过程中的关键知识点。 1. **Spring MVC与Spring Boot简介** Spring MVC是Spring框架的一个模块,专门用于...

    自定义注解得使用,模拟spring通过注解方式创建bean实例

    本篇将深入探讨如何自定义注解并模拟Spring通过注解方式创建bean实例。 首先,了解注解(Annotation)在Java中的角色。注解是一种元数据,它提供了在源代码中添加信息的方式,这些信息可以被编译器或运行时环境读取...

    Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rar

    Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rar Java开发案例-springboot-23-自定义注解实现post请求接收单个参数值-源代码+文档.rar Java开发案例-springboot-23-自定义注解...

Global site tag (gtag.js) - Google Analytics