1,定义拦截器
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class AuthorityInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(AuthorityInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
logger.info("进入到拦截器中:preHandle() 方法");
HandlerMethod handlerMethod=(HandlerMethod)handler;
AccessIntercept loginVerify=handlerMethod.getMethodAnnotation(AccessIntercept.class);
if (loginVerify!=null){
System.out.println(loginVerify.IsIntercept());
logger.info("不需要对 @loginVerify注解方法 进行拦截");
return false;
}else {
logger.info("对非@loginVerify注解方法 进行拦截处理");
System.out.println(request.getServletPath());
System.out.println(request.getParameter("id"));
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
logger.info("进入到拦截器中:postHandle() 方法中");
System.out.println(request.getRequestURI());
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
logger.info("进入到拦截器中:afterCompletion() 方法中");
System.out.println(request.getServletPath());
}
}
2,配置拦截器
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class InterceptorAdapterConfig extends WebMvcConfigurerAdapter {
@Autowired
// private RequestLimitIntercept authorityInterceptor;
private AuthorityInterceptor authorityInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry)
{
//注册自己的拦截器并设置拦截的请求路径
registry.addInterceptor(authorityInterceptor).addPathPatterns("/**");
super.addInterceptors(registry);
}
}
3,自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessIntercept {
boolean IsIntercept() default true;
}
4,使用自定义注解
在controller中的方法上面使用@AccessIntercept注解。



