Невозможно загрузить статический контент с помощью весенней загрузки с пружинной безопасностью

Мне нужно разместить статический 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 для файла, чтобы разрешитьAll(), но это тоже не работает.

.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 в своих запросах.

Вы не можете получить доступ к статическим ресурсам без авторизации. Вы также не опубликовали ошибку с конкретным минимально воспроизводимым примером.

Roman C 08.04.2024 17:46

@RomanC Я передаю токен авторизации в запрос, как и все другие мои вызовы REST (они работают нормально). Что касается минимального примера. Ожидается, что это сработает «из коробки», поместив файл в папку ресурсов. У меня нет другого кода, кроме того, который я вставил. Попробую поделиться подробностями.

Saurabh Tiwari 08.04.2024 17:51

Вы не можете получить доступ к статическим ресурсам с помощью токена. Вам следует использовать сеанс для хранения токена авторизации. Таким образом, вы получаете разрешение на доступ к статическим ресурсам без токена.

Roman C 08.04.2024 17:59

Я считаю, что, поскольку я явно добавил средство сопоставления запросов, чтобы разрешить этот путь, токен не будет никакой проблемой. не так ли?

Saurabh Tiwari 08.04.2024 18:35

Да, проблема в этом токене, удалите токен и добавьте сопоставитель, тогда он пройдет фильтр безопасности.

Roman C 08.04.2024 20:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Spring не предоставляет статический контент из папки resources; он обслуживает его из папки с именем resources, или static, или public в пути к классам.

Внутри папки ресурсов поместите папку с именем 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

Пожалуйста. Если вы подумаете об этом, вы не захотите, чтобы он открывал файлы из src/main/resources, он содержит ваши свойства, которые будут содержать конфигурацию, к которой вы не хотите, чтобы другие имели доступ.

lane.maxwell 09.04.2024 15:21

Другие вопросы по теме