记录一个spring boot 静态资源访问问题

2018/11/30

记录一个spring boot 静态资源访问问题

spring boot 只要把静态资源放在static目录下,理论是可以直接访问的。

但是,今天却发现了一个很是头疼的问题,静态资源放入static文件夹了,但通过浏览器却是访问不到。

网上搜索相关问题,都是相互复制,没有任何价值。

于是回到控制台,仔细查看spring boot 启动时输出的日志信息:


发现spring boot并没有对这个URL做映射,这应该是我做了什么自定义配置导致的spring boot 默认的自动配置被替换掉了。

于是把问题定位到了一个继承了WebMvcConfigurationSupport的java配置上:

public class WebConfig extends WebMvcConfigurationSupport { 
	@Override
	public void addInterceptors(InterceptorRegistry registry){
		registry.addInterceptor(new HttpInterceptor()); 
	}
}

有可能是这段代码导致的URL映射没自动进行。关掉这个配置,果然能从浏览器访问到静态资源了。

于是寻找这个配置添加资源映射的方法,找到了一个addResourceHandlers方法。

重载这个方法,搜索ResourceHandlerRegistry的用法:

private static final String[] RESOURCE_LOCATIONS = { "classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/" };
@Override
	protected void addResourceHandlers(ResourceHandlerRegistry registry) {
		try {
			File directiory = new File("");
			registry.addResourceHandler("/**").addResourceLocation(RESOURCE_LOCATIONS)
			.addResourceLocations("file:" + directiory.getCanonicalPath() + "/";
		} catch (Exception e){
			...
		}
	}

添加之后,静态资源正常访问。

Post Directory