版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fxbin123/article/details/82558544
在SpringBoot1.X 中,使用拦截器, 一般会继承 WebMvcConfigurerAdapter
类,如下图所示:
但是在 SpringBoot2.X 中 ,WebMvcConfigurerAdapter
被deprecated , 更好的做法是 implements WebMvcConfigurer
1、拦截器统一管理
package com.fxbin.demo.config;
import com.fxbin.demo.interceptor.MyInterceptor;
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.WebMvcConfigurer;
/**
* created with IntelliJ IDEA.
* author: fxbin
* date: 2018/9/9
* time: 14:46
* description:
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public MyInterceptor myInterceptor(){
return new MyInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//添加拦截路径和排除拦截路径
registry.addInterceptor(myInterceptor()).addPathPatterns("/**").excludePathPatterns("/test");
}
}
2、自定义拦截器
package com.fxbin.demo.interceptor;
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;
/**
* created with IntelliJ IDEA.
* author: fxbin
* date: 2018/9/9
* time: 14:48
* description:
*/
@Component
public class MyInterceptor implements HandlerInterceptor {
/**
* 进入controller层之前拦截请求
* @param request
* @param response
* @param handler
* @return
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.println("getContextPath:" + request.getContextPath());
System.out.println("getServletPath:" + request.getServletPath());
System.out.println("getRequestURI:" + request.getRequestURI());
System.out.println("getRequestURL:" + request.getRequestURL());
System.out.println("getRealPath:" + request.getSession().getServletContext().getRealPath("image"));
return true;
}
/**
* 处理请求完成后视图渲染之前的处理操作
* @param request
* @param response
* @param handler
* @param modelAndView
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
}
/**
* 视图渲染之后的操作
* @param request
* @param response
* @param handler
* @param ex
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
}
}
3、测试
由于我们设置了URI
是 /test
的话,会被跳过,所以先测试 http://localhost:8080/test 是否可以通过拦截器
测试通过,而 其它请求则会进入拦截器, 并且打印我们所期望的一些信息: