Web-Socket Аутентификация и авторизация в Spring-boot и angular 8 проекте не работают - PullRequest
0 голосов
/ 21 февраля 2020

Я создал приложение весенней загрузки, сгенерированное J-Hipster, и проект Angular 8. Я реализовал функциональность входа в систему, после входа в систему пользователь получает токен jwt. Поэтому каждый раз, когда пользователь запрашивает или вызывает любой API, этот токен идет в заголовках. В весенней загрузке я переопределил метод @doFilter для аутентификации api, извлекая токен из заголовка и проверяя их. Теперь я хочу использовать веб-сокет в приложении. Я написал базовый c метод подключения в angular проекте и простой проект на стороне весенней загрузки. Но всякий раз, когда я нажимаю кнопку подключения, я получаю сообщение об ошибке, например, требуется полная аутентификация в Eclipse IDE. Согласно моему исследованию, мы не можем отправлять заголовки, прикрепленные в топе. Поэтому, пожалуйста, я могу знать, как реализовать websocket в моем проекте

Angular код

 _connect() {
console.log( sessionStorage.getItem('token'));
    //connect to stomp where stomp endpoint is exposed
    //let ws = new SockJS(http://localhost:8080/greeting);
    let wso = new SockJS(this.webSocketEndPoint);
    this.stompClient = Stomp.over(wso);
    const _this = this;
    _this.stompClient.connect({"Authorization": "Bearer " + sessionStorage.getItem('token')}, function (frame) {
      _this.stompClient.subscribe(_this.topic, function (sdkEvent) {
          _this.onMessageReceived(sdkEvent);
      });
      //_this.stompClient.reconnect_delay = 2000;
  }, this.errorCallBack);
};

Классы весенней загрузки

@Configuration
@EnableWebSocketMessageBroker
public class WebsocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/topic");
        config.setApplicationDestinationPrefixes("/app");
    }
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/api/ws/**").setAllowedOrigins("http://localhost:4200").withSockJS();
    }

@Controller
public class GreetingController {
    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {

        return new Greeting("Hello !");
    }
}
@Override
    public void doFilter(ServletRequest servletRequest, FilterChain f_chain, ServletResponse servletResponse)
        throws IOException, ServletException {
        HttpServletRequest rqust = (HttpServletRequest) servletRequest;
        String tokenRecved = tokenCheck(rqust);
        if (this.tokenProvider.validateToken(tokenRecved)) {
            Authentication auth = this.tokenProvider.getAuthentication(tokenRecved);
            SecurityContextHolder.getContext().setAuthentication(auth);
        }
        f_chain.doFilter(servletRequest, servletResponse);
    }

    private String tokenCheck(rqust rqst){
        String bearerToken = rqst.getHeader(AUTHORIZATION_HEADER);
        if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
            return bearerToken.substring(7);
        }
        return null;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...