學習Spring Security時,需要在Spring Boot的配置類裏面註冊自己編寫的登錄頁面,但是發現在/resources/static/目錄下面的靜態文件找不到了,訪問的話顯示404。找了很久才知道了問題所在。
Spring中對靜態文件的加載
在Spring中如果我們想通過URL訪問靜態資源,比如/resources/下的文件,通過/resources/**來訪問,就需要在配置類中重寫如下方法:
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
}
}
Spring Boot中訪問靜態資源
Spring Boot中把很多東西都幫我們配置好了,就拿靜態資源訪問來說,源碼中有這樣的片段:
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/webjars/**")) {
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
}
if (!registry.hasMappingForPattern("/**")) {
registry.addResourceHandler("/**").addResourceLocations(
RESOURCE_LOCATIONS);
}
}
- /META-INF/resources/
- /resources/
- /static/
- /public/
所以我們不必再去顯式指明上面所列的文件夾裏面的靜態資源是可以訪問的。
Spring Boot裏面的@EnableWebMvc
由於很多東西都是Spring Boot通過Auto-Configuration幫我們自動配置好的,所以在Spring Boot中,當我們想通過配置類添加自己的頁面時,只需要寫@Configuration就可以了,如果加了@EnableWebMvc的話很多Spring Boot的自動配置就會失效,如果你想完全控制Spring MVC的配置,就可以在配置類中加入@EnablewebMvc。不然的話,還是使用Spring Boot默認的配置吧。