当前位置: 首页 > 知识库问答 >
问题:

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

秦承安
2023-03-14

我有以下结构

我使用的依赖项:

  • Spring启动装置
@EnableWebMvc
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/icon/**").addResourceLocations("classpath:/static/img/icon/");
        registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
    }

}

我在index.html试过这些

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

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

共有3个答案

劳华灿
2023-03-14

从Spring Boot 2.0开始,如果您使用@EnableWebSecurity,您必须手动定义哪些目录和文件可以访问,以及由谁访问

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http.authorizeRequests()
             .antMatchers("/**").permitAll() 
      ...
    }
...
}

在这种情况下,我让每个人都可以访问静态文件夹中的所有内容。在这之后我可以得到签名。svg有两种方式:

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

您可以尝试如何在springboot2.2.6?中提供静态内容,以获得相同重新措辞问题的答案和其他答案的链接。由于您使用的是Spring Security,您可能需要查看您的安全配置,因为从Spring Boot2.0开始,静态资源默认是安全的https://spring.io/blog/2017/09/15/security-changes-in-spring-boot-2-0-m4

甘学潞
2023-03-14

当您添加@EnableWebMvc时,您将覆盖SpringBoot的所有自动配置。这应该是有效的:

@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
 类似资料:
  • 问题内容: 我有两节课:和。后者声明为: 我需要的只是类中的方法(仅在其中,因为会有很多继承的类,而且我不想在所有这些类中都实现此方法),它将从静态调用返回类名。这是我在说的: 当我称它为: 但是父类中的每个声明只能访问父类变量,该变量的值为“ Action”。 有什么可行的方法吗? 问题答案: 总是返回使用该类的类的名称,因此使用静态方法并没有太大帮助。如果该方法不是静态的,则可以简单地使用ge

  • cmf_get_file_extension($filename) 功能 获取文件扩展名 参数 $filename: string 文件名 返回 string 文件扩展名

  • X2.2.0新增 sp_get_file_extension($filename) 功能: 获取文件扩展名 参数: $filename: 文件名 返回: 类型string,文件扩展名 使用: $suffix = sp_get_file_extension('23232.png');

  • 问题内容: 我想从 MimeType* 获取 扩展名 。 * 例如: 要将文件保存在Windows或Linux上,我可以使用这种方法从URL下载文件。因此,我只能保存它而没有扩展名(我不想要那样)。 这种方法只允许我获取 MimeType 而不是 扩展名 。 如何使用MimeType编写带有扩展名的文件? 问题答案: 通常有两种方法: 具有MimeTypes到扩展名的映射; 使用某种逻辑进行计算;

  • 我想从一个mimetype中得到扩展。 例如: 为了在Windows或Linux上保存我的文件,我有一个方法,让我从URL下载文件。所以,我只能在没有扩展的情况下保存它(我不想那样)。 这个方法只允许我获取MimeType,而不是扩展。 如何使用MimeType编写扩展名的文件?

  • 问题内容: 我正在尝试: 但是它继续提供我static_path中拥有的服务(如上所述,我在两个单独的路径中有两个不同的,但是我希望能够覆盖)。 问题答案: 从应用程序设置中删除。 然后将您的处理程序设置为: