介绍参数解析器
配置WebMvcConfigurer
使用SpringBoot拦截器怎么对请求进行判断?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
自定义注解
/* * ,*对比请求的用户身份是否符合 ,* @author liuyalong ,* @date 2020/9/25  16:03 ,*/@Target (ElementType.PARAMETER) @Retention (RetentionPolicy.RUNTIME) public @interface  CompareUser { ,/* * ,,*,从而name of 从而request parameter 用bind 。 ,,*/@AliasFor才能(“name"), String 价值(),default ““; @AliasFor才能(“value"), String 名字(),default ““; }
给控制器的字段添加注解
,, @ApiOperation (=value “删除用户“,,notes =,“根据手机号来删除用户“) @PostMapping才能(value =,“/delete_phone") public 才能;BaseCommonResult< Integer>, deletePhone (@CompareUser (=value “phone"), String 电话),{ ,,,int 小姐:=,userService.deleteByPhone(电话); ,,,return BaseCommonResult.success(我); ,,}
参数解析器
记得继承后加@ component,这里是基础……所以不用
/* * ,* @author liuyalong ,* @date 2020/9/25  15:56 ,*/public class  BaseCurrentUserInterceptor implements HandlerMethodArgumentResolver  { ,/* * ,,*,用于判定是否需要处理该参数注解,返回真正的为需要, ,,*,并会去调用下面的方法resolveArgument。 ,,*/@Override才能 public 才能;boolean  supportsParameter (MethodParameter 参数),{ ,,,//只处理CurrentUser注解修饰的参数 ,,,return parameter.hasParameterAnnotation (CompareUser.class); ,,} ,/* * ,,*,对比用户信息 ,,*/@Override才能 public 才能;Object  resolveArgument (MethodParameter 参数,ModelAndViewContainer mavContainer,, NativeWebRequest webRequest,, WebDataBinderFactory binderFactory), throws Exception { ,,,CompareUser parameterAnnotation =, parameter.getParameterAnnotation (CompareUser.class); ,,,Class<?祝辞,parameterType =, parameter.getParameterType (); ,,,if (parameterAnnotation ==, null), { ,,,,,throw new IllegalArgumentException (“Unknown  parameter type [,, +, parameterType.getName (), +,“]”); ,,,} ,,/* ,,,,*,获取要验证的字段名 ,,,*/,,,//检查是否给字段取了别名 ,,,String paramName =,““.equalsIgnoreCase (parameterAnnotation.name ()), ?, parameterAnnotation.value (),:, parameterAnnotation.name (); ,,,if (““.equalsIgnoreCase (parameterAnnotation.name ())), { ,,,,,//从参数中获取定义的字段名 ,,,,,paramName =, parameter.getParameter () . getname (); ,,,} ,,,//获取请求字段的值 ,,,String paramValue =, String.valueOf (webRequest.getParameter (paramName)); ,,,//从请求头中获取已经登录的用户 ,,,String userName =, webRequest.getHeader (AuthConstant.USER_TOKEN_HEADER); ,,,//对于根用户,可以操作一切,所以直接返回 ,,,if (! AuthConstant.ROOT_USER.equals(用户名),{ ,,,,,//判断身份是否一致,不一致就抛出异常,让RestControllerAdvice处理 ,,,,,if (userName ==, null | |, ! userName.equals (paramValue)), { ,,,,,,,throw new NotSameAuthorException (); ,,,,,} ,,,} ,,,//将参数原封不动返回出去,需要还原回需要的类型 ,,,WebDataBinder binder =, binderFactory.createBinder (webRequest, parameterType,, paramName); ,,,return binder.convertIfNecessary (paramValue, parameterType,,参数); ,,} }
配置WebMvcConfigurer
注意这里提供了两种方式加载,因为
@ configuration public class  WebMvcConfig implements WebMvcConfigurer  { @ autowired才能 private 才能;HandlerInterceptor  handlerInterceptor; @ autowired才能 private 才能;HandlerMethodArgumentResolver  currentUserInterceptor; @ autowired才能 private 才能;RequestMappingHandlerAdapter  requestMappingHandlerAdapter; @Override才能 null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null使用SpringBoot拦截器怎么对请求进行判断