Безопасность метода с @PreAuthorize - RequestHeader не обновляется после 403 - PullRequest
0 голосов
/ 04 мая 2018

Я разработал метод, аннотированный @PreAuthorize. Аннотация @PreAuthorize запускает метод (называемый isStringInList (String s)) в отдельном классе (@Service, который я квалифицировал как «myStringEvaluationService»), чтобы гарантировать, что метод возвращает true.

Например:

@PreAuthorize("@myStringEvaluationService.isStringInList(#myString)")
@RequestMapping(value = "/myEndPoint", method = POST)
void executeThisMethodIfAuthorised(@RequestHeader(name = "whateverTheStringIs") String myString) {
    //do stuff
}

Я использую Почтальон для отправки HTTP-запросов к методу. Если я отправляю строку, которая находится в списке, вышеуказанный метод выполняется нормально. Если я отправляю строку, которой нет в списке, метод не выполняется - это нормально, я так хочу, чтобы он вел себя. Он отправляет 403 - Запрещенное сообщение обратно Почтальону.

Проблема в том, что когда я повторно отправляю строку, которая находится в списке, я вижу из отладки, что строка, которой нет в списке, - это то, что отправляется для каждого последующего запроса. По какой-то причине ошибка 403 не приводит к обновлению переменной myString. Есть ли способ обойти это?

1 Ответ

0 голосов
/ 10 мая 2018

Решил проблему.

Я написал класс конфигурации безопасности, который расширил WebSecurityConfigurerAdapter и переопределил метод настройки этого класса (HttpSecurity http). Первоначально я просто включил некоторый код, чтобы разрешить отображение любых запросов на конечную точку. Проблема была в том, что когда я отправлял строку в заголовке HTTP, которого нет в списке, Spring Security кэшировал URL-адрес. Несмотря на то, что я изменил заголовок последующих запросов, я не изменил URL-адрес, и Spring Security посчитал, что этот URL-адрес нарушает безопасность, и, следовательно, заблокировал запрос.

Для устранения этой проблемы необходимо включить следующие две строки кода в метод configure (HttpSecurity http)

http.headers().cacheControl().disable();
http.requestCache().disable();

При отключении кэша запросов новый заголовок читался при каждой отправке запроса.

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