package cn.jeesoft.core.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; /** * 权限拦截器 * <p> * 在需要验证的方法,添加注解 * </p> * * @author king */ public class InterceptorAdapter extends HandlerInterceptorAdapter { /** * 方法执行前 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 检测是否添加过注解 if (handler.getClass().isAssignableFrom(HandlerMethod.class)) { // 获取方法注解 Before before = ((HandlerMethod) handler).getMethodAnnotation(Before.class); if (before == null) { if (((HandlerMethod) handler).getBean().getClass().isAnnotationPresent(Before.class)) { // 获取类注解 before = ((HandlerMethod) handler).getBean().getClass().getAnnotation(Before.class); } } // 分发处理 if (before != null) { // 判断是否启用拦截 if (before.enable()) { Class<? extends Interceptor>[] interceptors = before.value(); if (interceptors != null) { for (Class<? extends Interceptor> interceptor : interceptors) { if (!interceptor.isInterface()) { boolean isThrough = interceptor.newInstance().intercept(request, response, handler); if (!isThrough) { return false; } } } } } } } return true; } }