springboot2.x版本配置拦截器会拦截静态资源的解决方法

原因:

springboot1.x和2.x拦截器中静态资源访问的区别

  • 1.x的resources/static目录下的静态资源可以直接访问,当有配置自定义HandlerInterceptor拦截器时,请求静态资源路径不会被拦截 。

  • 2.x的如果自定义HandlerInterceptor拦截器时访问静态资源就会被同步拦截,导致页面中访问这些静态资源出现404。

解决方法:

项目目录

在这里插入图片描述

自定义的登录拦截器

@Component
public class LoginInterceptor extends HandlerInterceptorAdapter{

	@Override
	public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {
		StringBuffer requestURL = request.getRequestURL();
		System.out.println("-- "+requestURL.toString());
		if(null == request.getSession().getAttribute("user")){
			response.sendRedirect(request.getContextPath() + "/login");
			return false;
		}
		return true;
	}
	
	 @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
 
    }
	 
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
 
    }
	
}

注册拦截器,指定拦截路径和排除的路径

@Configuration
public class WebConfigurer extends WebMvcConfigurationSupport{
 
	@Autowired
	private LoginInterceptor loginInterceptor;
	
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    	//注册登录拦截器
    	InterceptorRegistration loginRegistry = registry.addInterceptor(loginInterceptor);
    	//拦截路径
    	loginRegistry.addPathPatterns("/**");
    	//排序拦截路径
    	loginRegistry.excludePathPatterns("/login");
    	loginRegistry.excludePathPatterns("/getImageCode");
    	loginRegistry.excludePathPatterns("/check");
    	loginRegistry.excludePathPatterns("/static/**");
    }
    
    /*
    *最重要的一步:在此处指明你在拦截器中排除拦截的静态资源路径指向的是classpath下static路径
    */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
    
}

补充

这段代码同时也指定了项目静态资源的访问路径,所以可以不用在application.properties中配置:spring.mvc.static-path-pattern=/static/**

发布了5 篇原创文章 · 获赞 1 · 访问量 1741

猜你喜欢

转载自blog.csdn.net/qq_38796854/article/details/98085030
今日推荐