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

本文详细介绍了SpringBoot 2.x版本中静态资源访问与自定义拦截器的配置区别,阐述了如何避免静态资源访问被拦截导致的404错误,包括自定义登录拦截器的实现与注册,以及如何正确配置资源处理器来确保静态资源正常访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:

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/**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值