1、新增注解文件
@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @RestController @RequestMapping(value = "testApi", produces = "application/json;charset=UTF-8") public @interface testApi { testEnum value() default testEnum.TEST; }
2、添加枚举类
public enum testEnum { TEST; }
3、配置拦截器--实现 WebMvcConfigurer
@Configuration public class webConfig implements WebMvcConfigurer { private static final Logger log = LoggerFactory.getLogger(webConfig.class); @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(new HandlerInterceptor() { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //添加拦截内容 System.out.println(1); HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); testApi tt = method.getAnnotation(testApi.class); System.out.println(tt);
Permission permission = getPermission(method); // 不拦截 Permission = TEST if (permission != null && permission.value() == testEnum.TEST) { return super.preHandle(request, response, handler); } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println(2); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(3); } }); }
/** * 验证是否采用Mutipart提交表单信息 * * @param request * @param method * @return */ private boolean validateMutipart(HttpServletRequest request, Method method) { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (!isMultipart) { return true; } FileUpload fileUpload = method.getAnnotation(FileUpload.class); if (fileUpload != null && fileUpload.value()) { return true; } for (Class<?> parameterType : method.getParameterTypes()) { if (parameterType.getTypeName().equals(MultipartFile.class.getTypeName()) || parameterType.isInstance(MultipartFile.class)) { return true; } } return false; }
/** * 获取方法的权限验证类型 * * @param method * @return */ private Permission getPermission(Method method) { Permission methodPermission = method.getAnnotation(Permission.class); if (methodPermission != null) { return methodPermission; } return method.getDeclaringClass().getAnnotation(Permission.class); }
}