`
y806839048
  • 浏览: 1087059 次
  • 性别: 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;

        }

}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics