Прежде всего, можно добавить аутентификацию, настроив то же самое в WebSecurityConfig
, добавив собственный JwtRequestFilter
, который будет анализировать ваш токен JWT и устанавливать контекст аутентификации для этого запроса.
A хорошая ссылка на то же самое: create-apis-with-jwt-authorization-using-spring-boot .
Что касается 2 и 3, Springboot не позволяет открывать конечные точки Dynami c для Регистрация STOMP, поэтому вам нужно будет предоставить /user/queue/chatting
, и клиенты должны будут подписаться на это напрямую. Однако, используя convertAndSendToUser (userId, destination, payload) , вы можете отправить сообщение на основе userId. Эта функция внутренне вызывает эту функцию , которая делает это this.destinationPrefix(/user) + user(/username) + destination(/queue/chatting)
, так как вы можете видеть, что переменная user
получает префикс для конечного пункта назначения, вы можете передать userId вместо userName.
Ссылка для этого: simpMessagingTemplate.convertAndSendToUser
Но учтите, что в этом случае вам нужно будет установить имя пользователя для этого сеанса как сам userId. Это можно сделать в вашем пользовательском JwtRequestFilter
private void populateSecurityContextHolder(HttpServletRequest request, String userId, List<SimpleGrantedAuthority> grantedAuthorities) {
PreAuthenticatedAuthenticationToken authToken = new PreAuthenticatedAuthenticationToken(
userId, null, grantedAuthorities);
authToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authToken);
log.info("Authentication set for userId " + userId);
}
Таким образом, ваш сервер может отправлять сообщения на основе userId, который он получает в сообщениях.