Spring Boot2.x 拦截器Interceptor对静态资源的处理
一,SpringBoot1.x已经做好了静态资源映射,但是2.x以上版本不行, 2.X以上版本拦截器默认会对静态资源进行拦截,
WebMvcConfigurerAdapter(Spring4中方法,己过时),Spring5 己用WebMvcConfigurer替代
解决办法,手动进行排除
项目结构目录


自定义的拦截器
package com.zdx.crud.springboot.component; 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; /** * 自定义拦截器 * @author zhangqiang * @create 2020-12-25 20:20 */ @Component public class LoginHandlerIntercepter implements HandlerInterceptor { //在目标方法执行之前 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object loginUser = request.getSession().getAttribute("loginUser"); System.out.println("loginUser" + loginUser); if (loginUser == null) { // 未登录,返回登录页面 request.setAttribute("msg", "没有权限,请登录"); // response.sendRedirect(request.getContextPath() + "/index.html"); request.getRequestDispatcher("/index.html").forward(request, response); return false; } else { // 己登录,放行 return true; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
在 WebMvcConfigurer 进行配置, 自己定义的要 implements WebMvcConfigurer接口
package com.zdx.crud.springboot.config; import com.zdx.crud.springboot.component.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.*; import java.util.Arrays; /** * WebMvcConfigurerAdapter(Spring4中方法,己过时),Spring5 己用WebMvcConfigurer替代 * @author zhangqiang * @create 2020-12-22 20:31 */ @Configuration public class MyMvcConfig implements WebMvcConfigurer { @Autowired private LoginHandlerIntercepter loginHandlerIntercepter; //Servlet三大组件 //1,Servlet @Bean public ServletRegistrationBean servletRegistrationBean(){ ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new MyServlet(), "/myServlet"); return servletRegistrationBean; } //2,Filter @Bean public FilterRegistrationBean filterRegistrationBean(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new MyFilter()); filterRegistrationBean.setUrlPatterns(Arrays.asList("/hello", "/myServlet")); return filterRegistrationBean; } //3,Listener @Bean public ServletListenerRegistrationBean servletListenerRegistrationBean(){ ServletListenerRegistrationBean servletListenerRegistrationBean = new ServletListenerRegistrationBean(new MyServletListener()); return servletListenerRegistrationBean; } /** * 配置自己的国际化语言解析,将其加入到Spring容器中 * @return */ @Bean public LocaleResolver localeResolver(){ return new LaugueLocaleResolver(); } //自定义视图解析 public void addViewControllers(ViewControllerRegistry registry) { // test registry.addViewController("/test").setViewName("success"); // 去首页 registry.addViewController("/").setViewName("login"); registry.addViewController("/index.html").setViewName("login"); registry.addViewController("/main.html").setViewName("dashboard"); } /** * 拦截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { // 通过 new LoginHandlerIntercepter() 方式 // InterceptorRegistration addInterceptor = registry.addInterceptor(new LoginHandlerIntercepter()); // 注解方式 注入loginHandlerIntercepter InterceptorRegistration addInterceptor = registry.addInterceptor(loginHandlerIntercepter); // 拦截配置 addInterceptor.addPathPatterns("/**"); // springBoot1.x已经做好了静态资源映射,但是2.x以上版本不行 // 排除不拦截配置 addInterceptor.excludePathPatterns("/webjars/**");//排除静态资源通过Pom文件引入的 addInterceptor.excludePathPatterns("/static/**"); //排除静态资源 // 自定义登录时不拦截的 addInterceptor.excludePathPatterns("/"); addInterceptor.excludePathPatterns("/user/login"); addInterceptor.excludePathPatterns("/index.html"); } /** * 注:指明你在拦截器中排除拦截的静态资源路径指向的是classpath下static路径 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/static/"); // WebMvcConfigurer.super.addResourceHandlers(registry); } }

浙公网安备 33010602011771号