问题:SpringBoot静态资源被拦截

问题

今天做springboot项目中的拦截器的demo时发现静态资源被拦截,出现302错误。

302 redirect: 302 代表暂时性转移(Temporarily Moved )。
意思就是你访问网址A,但是网址A因为服务器端的拦截器或者其他后端代码处理的原因,会被重定向到网址B。

静态资源被HandlerInterceptor拦截了!

原因

在网上找了半天发现是springboot2.0才会出现的问题。

因为spring boot 2.x依赖的spring 5.x版本,相对于spring boot 1.5.x依赖的spring 4.3.x版本而言,针对资源的拦截器初始化时有区别,有兴趣请查看源码。

解决办法:

1.我们在拦截器的配置文件里添加静态资源路径以及设置不拦截的静态资源

@Configuration
public class SessionConfiguration implements WebMvcConfigurer {
	/**
	 * 注册添加静态资源
	 */
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
	}
	/**
	 * 注册添加拦截器
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		InterceptorRegistration addInterceptor = registry.addInterceptor(getSecurityInterceptor());
		addInterceptor.excludePathPatterns("/static/**");//不拦截静态资源
		addInterceptor.excludePathPatterns("/login");
		addInterceptor.excludePathPatterns("/loginCheck");
		addInterceptor.addPathPatterns("/**");
	}

	@Bean
	public SessionInterceptor getSecurityInterceptor() {
		return new SessionInterceptor();
	}

	/**
	 * 添加默认主页,访问域名或者端口跳转
	 */
	@Override
	public void addViewControllers(ViewControllerRegistry registry) {
		registry.addViewController("/").setViewName("forward:login.html");
	}
}

2.注意前端页面引用静态资源路径,不然出现404(本例前端模板是thymeleaf)

<link rel="stylesheet" type="text/css" th:href="@{/static/css/heart.css}"/>
<script type="text/javascript" th:src="@{/static/js/jquery-1.8.3.js}"></script>
<script type="text/javascript" th:src="@{/static/js/index.js}"></script>

这样就解决了静态资源被拦截的问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值