Spring Can';扩展WebMVCConfiguer后,无法从静态目录获取任何文件

Spring Can';扩展WebMVCConfiguer后,无法从静态目录获取任何文件,spring,spring-boot,maven,thymeleaf,spring-boot-maven-plugin,Spring,Spring Boot,Maven,Thymeleaf,Spring Boot Maven Plugin,我使用的依赖项包括: 弹簧靴起动器 弹簧起动试验 SpringBootStarterWeb 弹簧启动装置 弹簧启动安全 thymeleaf-extras-springsecurity5 mysql连接器java spring引导启动器数据jpa 我在index.html中尝试过这些 <img src="icon/signin.svg"> <img src="/icon/signin.svg"> <img src="

我使用的依赖项包括:

  • 弹簧靴起动器
  • 弹簧起动试验
  • SpringBootStarterWeb
  • 弹簧启动装置
  • 弹簧启动安全
  • thymeleaf-extras-springsecurity5
  • mysql连接器java
  • spring引导启动器数据jpa
我在index.html中尝试过这些

<img src="icon/signin.svg">
<img src="/icon/signin.svg">
<img src="./icon/signin.svg">
<img src="../static/img/icon/signin.svg">



没有成功。此外,我试图将资源目录移动到主目录,但什么也没有。有什么想法吗?

您可以尝试找到答案,并链接到同一个重新措辞的问题的其他答案。由于您使用的是Spring Security,您可能需要查看您的安全配置,因为从Spring boot 2.0开始,静态资源在默认情况下是安全的

当您添加
@EnableWebMvc
时,您将覆盖Spring boot的所有自动配置。这应该起作用:

@Configuration
@AutoConfigureAfter(WebMvcAutoConfiguration.class)
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/icon/**").addResourceLocations("classpath:/static/img/icon/");
    }
}
另外,我刚刚看了一下您的目录结构的图片,我确信除非我的眼睛离开,否则您的“资源”文件夹不在
src/main
下。它应该就在
java
文件夹的旁边:

src
|_ main
      |_ java
      |_ resources

结果证明了为什么这对我不好。 从Spring Boot2.0如果您使用的是@EnableWebSecurity,您必须手动定义哪些目录和文件可以访问,哪些人可以访问

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http.authorizeRequests()
             .antMatchers("/**").permitAll() 
      ...
    }
...
}
在这种情况下,我让每个人都访问静态文件夹中的所有内容。在此之后,我可以通过两种方式获取signin.svg:

<img src="icon/signin.svg"> <!--Because of registry.addResourceHandler("/icon/**").addResourceLocations("classpath:/static/img/icon/"); mapping -->
<img src="img/icon/signin.svg">

<img src="icon/signin.svg"> <!--Because of registry.addResourceHandler("/icon/**").addResourceLocations("classpath:/static/img/icon/"); mapping -->
<img src="img/icon/signin.svg">