定义注解类:
@Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface SignCheck { RequiredType required() default RequiredType.FORCE; }
定义拦截器:
public class ApiSignInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { SignCheck signCheck = InterceptorUtils.getAnnotaion(handler, SignCheck.class); if (signCheck == null) { return true; } else { return signCheck(request, response); } } private boolean signCheck(HttpServletRequest request, HttpServletResponse response) { // 判断逻辑 return false; } }
工具类:
public class InterceptorUtils { private static Logger logger = getLogger(InterceptorUtils.class); private InterceptorUtils() { } // CHECKSTYLE:OFF public static <A extends Annotation> A getAnnotaion(Object handler, Class<A> annotationClass) { if (!(handler instanceof HandlerMethod)) { return null; } HandlerMethod handlerMethod = (HandlerMethod) handler; A result; if ((result = findAnnotation(handlerMethod.getMethod(), annotationClass)) != null) { logger.trace("found [{}] annotation in method-level:{}", annotationClass.getSimpleName(), handlerMethod.getMethod()); } else { if ((result = findAnnotation(handlerMethod.getBeanType(), annotationClass)) != null) { logger.trace("found [{}] annotation in type-level:{}", annotationClass.getSimpleName(), handlerMethod.getBeanType()); } } return result; } public static String firstNotBlank(String... values) { return Arrays.stream(values).sequential().filter(StringUtils::isNotBlank).findFirst() .orElse(null); } @Nullable public static Map<String, String> errTipToMap(@Nullable String[] errTips) { // 是空或者不是偶数个,返回空 if (ArrayUtils.isEmpty(errTips) || errTips.length % 2 != 0) { return null; } return IntStream.range(0, errTips.length / 2).boxed() .collect(toMap(i -> errTips[i * 2], i -> errTips[i * 2 + 1])); } }
原文:https://www.cnblogs.com/koushr/p/11907896.html