From 25028774d7526e0486c1ea8e22d43251a42d503f Mon Sep 17 00:00:00 2001 From: "fabio.formosa" Date: Fri, 8 May 2020 01:10:10 +0200 Subject: [PATCH] #6 fixed websocke with jwt token header --- .../security/helpers/impl/JwtTokenHelper.java | 3 +++ .../src/app/model/SocketOption.model.ts | 5 ++++- .../src/app/services/logs.websocket.service.ts | 6 +++--- .../src/app/services/progress.websocket.service.ts | 6 +++--- .../src/app/services/websocket.service.ts | 7 ++++++- 5 files changed, 19 insertions(+), 8 deletions(-) diff --git a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java index cc51e3d..b7f24d7 100644 --- a/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java +++ b/quartz-manager-api/src/main/java/it/fabioformosa/quartzmanager/security/helpers/impl/JwtTokenHelper.java @@ -150,6 +150,9 @@ public class JwtTokenHelper { return authHeader.substring(7); } + if(request.getParameter("access_token") != null) + return request.getParameter("access_token"); + return null; } diff --git a/quartz-manager-frontend/src/app/model/SocketOption.model.ts b/quartz-manager-frontend/src/app/model/SocketOption.model.ts index 20d8fe3..529da9d 100644 --- a/quartz-manager-frontend/src/app/model/SocketOption.model.ts +++ b/quartz-manager-frontend/src/app/model/SocketOption.model.ts @@ -4,11 +4,14 @@ export class SocketOption{ brokerName : string; reconnectionTimeout : number = 30000 - constructor(socketUrl : string, topicName : string, brokerName : string = null, reconnectionTimeout : number = 30000){ + getAccessToken: Function = () => null; + + constructor(socketUrl : string, topicName : string, getAccessToken?: Function, brokerName : string = null, reconnectionTimeout : number = 30000){ this.socketUrl = socketUrl; this.topicName = topicName; this.brokerName = brokerName; this.reconnectionTimeout = reconnectionTimeout; + this.getAccessToken = getAccessToken || (() => null); } } \ No newline at end of file diff --git a/quartz-manager-frontend/src/app/services/logs.websocket.service.ts b/quartz-manager-frontend/src/app/services/logs.websocket.service.ts index ce58bfe..fe2cd06 100644 --- a/quartz-manager-frontend/src/app/services/logs.websocket.service.ts +++ b/quartz-manager-frontend/src/app/services/logs.websocket.service.ts @@ -1,12 +1,12 @@ import { Injectable, OnInit } from '@angular/core'; -import { WebsocketService } from '.'; +import { WebsocketService, ApiService } from '.'; import { SocketOption } from '../model/SocketOption.model'; @Injectable() export class LogsWebsocketService extends WebsocketService { - constructor(){ - super(new SocketOption('/quartz-manager/logs', '/topic/logs')) + constructor(private apiService: ApiService){ + super(new SocketOption('/quartz-manager/logs', '/topic/logs', apiService.getToken)) } } \ No newline at end of file diff --git a/quartz-manager-frontend/src/app/services/progress.websocket.service.ts b/quartz-manager-frontend/src/app/services/progress.websocket.service.ts index abe41fe..173428b 100644 --- a/quartz-manager-frontend/src/app/services/progress.websocket.service.ts +++ b/quartz-manager-frontend/src/app/services/progress.websocket.service.ts @@ -1,12 +1,12 @@ import { Injectable, OnInit } from '@angular/core'; -import { WebsocketService } from '.'; +import { WebsocketService, ApiService } from '.'; import { SocketOption } from '../model/SocketOption.model'; @Injectable() export class ProgressWebsocketService extends WebsocketService { - constructor(){ - super(new SocketOption('/quartz-manager/progress', '/topic/progress')) + constructor(private apiService: ApiService){ + super(new SocketOption('/quartz-manager/progress', '/topic/progress', apiService.getToken)) } } \ No newline at end of file diff --git a/quartz-manager-frontend/src/app/services/websocket.service.ts b/quartz-manager-frontend/src/app/services/websocket.service.ts index f4a213b..e1eda64 100644 --- a/quartz-manager-frontend/src/app/services/websocket.service.ts +++ b/quartz-manager-frontend/src/app/services/websocket.service.ts @@ -109,7 +109,12 @@ export class WebsocketService { connect = () => { const headers = {}; - this._socket.client = new SockJS(this._options.socketUrl); + + let socketUrl = this._options.socketUrl; + if(this._options.getAccessToken()) + socketUrl += `?access_token=${this._options.getAccessToken()}` + + this._socket.client = new SockJS(socketUrl); this._socket.stomp = Stomp.over(this._socket.client); this._socket.stomp.connect(headers, this._socketListener, this._onSocketError); this._socket.stomp.onclose = this.scheduleReconnection;