Spring Boot Websocket Stomp + JWT (@preauthorize) Проблема SecurityContext: «Объект аутентификации не был найден»JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Boot Websocket Stomp + JWT (@preauthorize) Проблема SecurityContext: «Объект аутентификации не был найден»

Сообщение Anonymous »

I'm building a Spring Boot chat application with:

[*]WebSocket (STOMP) endpoint (with message broker)
[*]Clients connect via STOMP and authenticate with JWT (sent as a STOMP Authorization header in the CONNECT frame)
[*]Spring Security with @PreAuthorize on @MessageMapping methods
< /ul>
У меня есть канал Interceptor, который: < /p>

Код: Выделить всё

- On CONNECT, parses the JWT from the Authorization header
- Validates JWT and creates an Authentication object (with authorities)
- Calls StompHeaderAccessor.setUser(authentication)
< /code>
Мой контроллер выглядит как: < /p>
@MessageMapping("/chat/message.send")
@PreAuthorize("hasAuthority('SCOPE_WRITE')")
public void sendMessage(@Payload MessageRequestDto dto) {

}
< /code>
Но всякий раз, когда получается отправка топа, я получаю:
AuthenticationCredentialSnotFoundException: объект аутентификации не был найден в SecurityContext < /p>
из -за: < /p>
private Authentication getAuthenticationOrThrow() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated())
throw new AuthenticationCredentialsNotFoundException("No authenticated user found in SecurityContext");

return authentication;
}
Как мне правильно подключить Spring Security, чтобы пользователь, аутентифицированный в Stomp Connect (через JWT), доступен в SecurityContext для каждого @messagemapping? (Я могу предоставить github Link, если это необходимо - https://github.com/engly817chat/engly-server), который является univ -проектом
I также пытался (как предложено Spring /Stackoverflow ответов), добавив второй канал Internetceptor, который, для каждого входящего сообщения, Sopies Accesster.Getuser. Я подтвердил в журналах, что Accesster.getUser () является действительным объектом аутентификации во время обработки сообщений, с правильными органами.


Подробнее здесь: https://stackoverflow.com/questions/796 ... oblem-auth
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»