如何拦截SockJS发送的握手请求

时间:2019-06-03 11:44:15

标签: angular spring interceptor stomp sockjs

我正在尝试在角度客户端和Spring Boot服务器之间创建套接字连接。

const ws = new SockJS(this.addressStorage.apiAddress + '/socket', null, {
  sessionId: function (): string {
    return that.authManager.playerId + ':' + lobbyName + ':' + uuid();
  }
});

创建SockJS实例后,客户端将请求发送到我的服务器。 screen of console, showing handshake request

自从我在服务器上启用WebSecurity以来,我需要授权每个请求,包括sockjs握手。因此,在创建SockJS时,会弹出以下窗口:

screen showing google's chrome login prompt

我不希望用户在客户端与服务器建立套接字连接时再次输入其登录名和密码。不幸的是,不可能使用SockJS添加Authorization标头,所以我决定使用拦截器。

此拦截器无法捕获SockJS握手:

export class SocketInterceptorService implements HttpInterceptor {

  constructor(private authManager: AuthManagerService) {
  }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    console.log(req.url);
    console.log(req);
    // req = req.clone({
    //   setHeaders: {
    //     Authorization: this.authManager.basicToken
    //   }
    // });
    return next.handle(req);
  }
} 

那么我该如何拦截SockJS握手以便自动授权SockJS连接?

0 个答案:

没有答案