无法使用 Spring Boot 和 Spring Security 下载静态内容

问题描述 投票:0回答:1

我需要在 Spring Boot 应用程序中提供静态 csv 文件,以便浏览器可以从服务器下载它。正如在多个文档中所读到的,Spring Boot 默认提供 src/main/resources 的内容。

我刚刚将我的sample-user-creation.csv 文件保存在 src/main/resources 文件夹中。除此之外,我没有添加任何代码行来使其工作。

我正在尝试使用 GET 请求下载文件:

http://localhost:8080/sample-user-creation.csv

但是根本不起作用。

我也尝试过设置:

spring.mvc.static-path-pattern=/content/** 

并尝试使用:

http://localhost:8080/content/sample-user-creation.csv

这也行不通。

我正在使用 Spring Security,并且还尝试将文件的 requestMatchers 显式设置为 PermitAll() 但这也不起作用。

.authorizeHttpRequests((auth) -> auth
                            .requestMatchers(CorsUtils::isPreFlightRequest).permitAll()
                            .requestMatchers("/admin/**")
                            .hasRole("ADMIN")
                            .requestMatchers(HttpMethod.POST, "/public/login").permitAll()
                            .requestMatchers(HttpMethod.POST, "/public/register")
                            .permitAll()
                            .requestMatchers("/sample-user-creation.csv").permitAll()
                            .anyRequest().authenticated()
                        )

为什么这对我不起作用。所有文档都说这是默认行为,无需任何配置即可工作。

我在这里做错了什么吗?或者我需要添加任何其他配置吗?

添加更多细节:

  1. 我也通过此 API 传递有效的身份验证令牌(适用于我的其他 api)。
  2. 我也尝试在我的请求中设置 Content-Type: text/csv 。
java spring spring-boot spring-security static-files
1个回答
0
投票

Spring 不提供

resources
文件夹中的静态内容;它从类路径上名为
resources
的文件夹提供服务。

在资源文件夹中,放置一个名为

/static
/public
/resources
的文件夹。然后放置在此文件夹中的任何文件都将作为静态内容。

因此,就您的情况而言,请考虑在

/src/main/resources
内添加一个名为
static
的文件夹。在静态文件夹中,添加您的文件,
sample-user-creation.csv
。启动您的应用程序,您应该能够访问应用程序根目录下的该文件,
http://localhost:8080/sample-user-creation.csv

如果您仍然设置了静态路径,例如

spring.mvc.static-path-pattern=/content/**
,可在 http://localhost:8080/content/sample-user-creation.csv`

获取
© www.soinside.com 2019 - 2024. All rights reserved.