Использование @PreAuthorize в методе, который возвращает SseEmitter, возвращает HTTP 406 - PullRequest
0 голосов
/ 20 декабря 2018

Я использую jwt для аутентификации, подозреваю, что это как-то связано с заголовком запроса, в котором есть токен.

Получение отправленного сервером события без добавления @PreAuthorize работает просто отлично:

@GetMapping("/sse")
public SseEmitter serverSentEvent() throws IOException
{
   SseEmitter emitter = new SseEmitter(2592000000L);
   emitter.send("OK");

   return emitter;
}

Как бы то ни было, когда я добавляю @PreAuthorize для проверки роли использования, я получаю ответ 406 (не могу установитьсоединение с сервером на http://localhost:8080/sse)

@GetMapping("/sse")
@PreAuthorize("hasRole('ADMIN')")
public SseEmitter serverSentEvent() throws IOException
{
   SseEmitter emitter = new SseEmitter(2592000000L);
   emitter.send("OK");

   return emitter;
}

1 Ответ

0 голосов
/ 21 декабря 2018

Очевидно, перехватчик JWT не добавлял токен в заголовок авторизации для запросов EventSource, поэтому я использовал ng-event-source , который позволяет настраивать заголовки HTTP в EventSource.

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