Spring Security: проверка подлинности SecurityContext Null с некоторыми сопоставлениями - PullRequest
0 голосов
/ 03 декабря 2018

У меня проблемы с Spring Security и некоторыми URL-адресами.

Это сценарий: Spring Boot 2.1.0 Spring Security 5.1.1

Я использую стандартную конфигурацию безопасности слогин и тому подобное.У меня также есть некоторые роли и разрешения с PreAuthorize в RequestMapping из Controller.Здесь нет проблем.Все работает отлично.

Проблема обнаруживается с некоторыми сопоставлениями.Я покажу вам пример:

@RequestMapping(value = "/codigo/{barcode}.pdf")
@ResponseBody
@PreAuthorize("hasAnyRole({'ROLE_ADMIN','ROLE_USER'})")
public void codigo(HttpServletRequest request, HttpServletResponse response, @PathVariable(required = true, name = "barcode") String barcode) {
...
}

Этот URL возвращает отчет в формате PDF, а не HTML-страницу.

Я получаю это сообщение об ошибке:

AuthenticationCredentialsNotFoundException: An Authentication object was not found in the Security Context

Если я добавлю какой-нибудь код для проверки контекста безопасности

SecurityContext ctx = SecurityContextHolder.getContext();
Logger.getLogger(InformesController.class.getName()).log(Level.WARNING, "Context: {0}", ctx);

, то получу следующее:

2018-12-03 10:11:19.104  WARN 11356 --- [io-8081-exec-10] c.g.e.controller.InformesController      : Context: org.springframework.security.core.context.SecurityContextImpl@ffffffff: Null authentication

Я пробовал разные комбинации, чтобы получить одну работающую.Это результат:

@ RequestMapping (value = "/codigo/ndombarcode enj.pdf"): нулевая аутентификация

@ RequestMapping (value = "/ codigo / {barcode} "): Если {штрих-код} равен'thing.pdf '(или .txt или какому-либо другому расширению) -> Нулевая аутентификация

@ RequestMapping (value =" / codigo / {barcode} "): если{штрих-код} - это что-то, все работает нормально.

Я проверил это в Firefox и Chrome, чтобы убедиться, что это не проблема браузера, и получил те же результаты.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...