一、自定义拦截器实现HandlerInterceptor接口。
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
@Slf4j
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
//拦截器可以设置或修改某些参数
httpServletRequest.setAttribute("key","value");
HandlerMethod handlerMethod = (HandlerMethod)o;
log.info("beanName:"+handlerMethod.getBean().getClass() );
log.info("methodName:"+handlerMethod.getMethod() );
//拦截器将请求转发
httpServletRequest.getRequestDispatcher("/test").forward(httpServletRequest,httpServletResponse);
return false;
}
@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-------");
}
}
二、定义一个继承WebMvcConfigurerAdapter的类,重写addInterceptors方法。
import com.web.filter.MyFilter;
import com.web.interceptor.MyInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author cherrytang
*/
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
private final MyInterceptor myInterceptor;
@Autowired
public WebConfig(MyInterceptor myInterceptor) {
this.myInterceptor = myInterceptor;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/hello");
}
/**
* 过滤器配置
* @return FilterRegistrationBean
*/
@Bean
public FilterRegistrationBean timeFilter(){
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
MyFilter myFilter = new MyFilter();
List<String> urls = new ArrayList<>();
urls.add("/test");
filterRegistrationBean.setUrlPatterns(urls);
filterRegistrationBean.setFilter(myFilter);
return filterRegistrationBean;
}
}