실행 순서
근원
인터셉터 클래스
package com.jd.m.tg.interceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class HandlerInterceptor1 implements HandlerInterceptor {
private static final Logger LOG= LoggerFactory.getLogger(MyInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
LOG.info("执行拦截器的preHandle方法");
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
LOG.info("执行拦截器的postHandle方法");
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
LOG.info("执行拦截器的afterCompletion方法");
}
}
또 다른 부류의 인터셉터 기반 콘텐츠 및 일관성;
인터셉터 구성 클래스
package com.jd.m.tg.config;
import com.jd.m.tg.interceptor.HandlerInterceptor1;
import com.jd.m.tg.interceptor.HandlerInterceptor2;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@AllArgsConstructor
public class InterceptorConfig extends WebMvcConfigurerAdapter{
private MyInterceptor myInterceptor;
private MyInterceptorTwo myInterceptorTwo;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(HandlerInterceptor1).addPathPatterns("/test/**");
registry.addInterceptor(HandlerInterceptor2).addPathPatterns("/test/**");
}
}
SpringMVC의 구성 :
<!--拦截器 --> <mvc:interceptors> <!--多个拦截器,顺序执行 --> <mvc:interceptor> <!-- /**表示所有url包括子url路径 --> <mvc:mapping path="/**"/> <bean class="cn.itcast.ssm.interceptor.HandlerInterceptor1"></bean> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="cn.itcast.ssm.interceptor.HandlerInterceptor2"></bean> </mvc:interceptor> </mvc:interceptors>
운영 결과
com.jd.m.tg.interceptor.HandlerInterceptor2 : 执行拦截器的preHandle方法
2017-12-19 11:18:50.237 INFO 8988 --- [0.0.1-80-exec-1] com.jd.m.tg.interceptor.HandlerInterceptor1 : 执行拦截器的preHandle方法
2017-12-19 11:18:50.255 INFO 8988 --- [0.0.1-80-exec-1] com.jd.m.tg.interceptor.HandlerInterceptor1 : 执行拦截器的postHandle方法
2017-12-19 11:18:50.255 INFO 8988 --- [0.0.1-80-exec-1] com.jd.m.tg.interceptor.HandlerInterceptor2 : 执行拦截器的postHandle方法
2017-12-19 11:18:50.255 INFO 8988 --- [0.0.1-80-exec-1] com.jd.m.tg.interceptor.HandlerInterceptor1 : 执行拦截器的afterCompletion方法
2017-12-19 11:18:50.255 INFO 8988 --- [0.0.1-80-exec-1] com.jd.m.tg.interceptor.HandlerInterceptor2 : 执行拦截器的afterCompletion方法
교육 자료
https://www.bilibili.com/video/av47953244?p=45