SpringBoot 拦截器配置
springboot继承springMvc拦截配置跟springmvc拦截器配置并没有什么大的区别
- 继承 HandlerInterceptorAdapter 类 定义一个拦截器
- 继承 WebMvcConfigurerAdapter 根据注册添加到
- 设置需要拦截的路径和名单即可
定义拦截器
public class IncepetTest extends HandlerInterceptorAdapter { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("进入拦截器。。。。"); return true; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { } }
继承 WebMvcConfigurerAdapter 类 (虽然已被springboot启用但是还能用)
@Configuration public class InteceptorWebConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { //拦截的路径 String [] interceptor = {"/user/**"}; //路径白名单 String [] exInterceptor = {"/index","/test"}; //注册拦截器 过个拦截器 下面多次添加即可 registry.addInterceptor(new IncepetTest()) //拦截路径 .addPathPatterns(interceptor) //过滤路径 .excludePathPatterns(exInterceptor); } }
虽然被弃用了,但是还能,可以实现拦截器功能
springboot提供的新拦截器两种方式 官方推荐第二种
- 继承 WebMvcConfigurationSupport 类
@Configuration public class InteceptorWebConfig2 extends WebMvcConfigurationSupport { @Override protected void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new IncepetTest()).addPathPatterns("/**") .excludePathPatterns( "/defer"); super.addInterceptors(registry); } @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); super.addResourceHandlers(registry); } @Override public void addViewControllers(ViewControllerRegistry registry){ registry.addViewController("/index").setViewName("forward:/index.jsp"); } }
但是运行的时候跳转页面时候会报错
javax.servlet.ServletException: Could not resolve view with name 'index' in servlet with name 'dispatcherServlet'
视图无法解析,明明配置了springboot web配置
不应该的,没配置拦截器之前页面都可以正常跳转。
解决办法是重新配置解析页面方法
private static final String VIEW_PREFIX = "/";// 视图前缀 private static final String VIEW_SUFFIX = ".jsp";// 视图后缀 private static final String VIEW_CONTENT_TYPE = "text/html;charset=UTF-8";//视图的内容类型。 /** * 配置 视图解析器 * @return */ @Bean public ViewResolver viewResolver(){ InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setCache(true); resolver.setPrefix(VIEW_PREFIX); resolver.setSuffix(VIEW_SUFFIX); resolver.setExposeContextBeansAsAttributes(true); resolver.setContentType(VIEW_CONTENT_TYPE); return resolver; }
- 实现 接口 WebMvcConfigurer
实现接口即可定义路径即可