SpringBoot 拦截器配置

186 阅读1分钟

SpringBoot 拦截器配置

 

springboot继承springMvc拦截配置跟springmvc拦截器配置并没有什么大的区别

  1. 继承 HandlerInterceptorAdapter 类 定义一个拦截器
  2. 继承 WebMvcConfigurerAdapter 根据注册添加到
  3. 设置需要拦截的路径和名单即可

 

定义拦截器

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

 

实现接口即可定义路径即可