24
24
@ Slf4j
25
25
public class WsOauthHandlerBase extends WsHandlerBase {
26
26
27
+ protected String name ;
27
28
protected OauthTokenManager tokenHandler ;
28
29
protected Set <WsConnectContext > clientsConnected = ConcurrentHashMap .newKeySet ();
29
30
protected Set <WsConnectContext > clientsQuarantined = ConcurrentHashMap .newKeySet ();
@@ -35,8 +36,9 @@ public class WsOauthHandlerBase extends WsHandlerBase {
35
36
return t ;
36
37
});
37
38
38
- public WsOauthHandlerBase () {
39
+ public WsOauthHandlerBase (String name ) {
39
40
super ();
41
+ this .name = name ;
40
42
ShutdownHook .register (() -> {
41
43
hb .close ();
42
44
hb = null ;
@@ -50,7 +52,7 @@ public WsOauthHandlerBase() {
50
52
s .getRemote ().sendPing (ByteBuffer .allocate (1 ));
51
53
} catch (Exception e ) {
52
54
try {
53
- s .close (1000 , "heartbeat failed" );
55
+ s .close (1000 , "(" + name + ") heartbeat failed" );
54
56
} catch (Exception ignore ) {
55
57
}
56
58
}
@@ -64,49 +66,50 @@ void setTokenHandler(OauthTokenManager tokenHandler) {
64
66
}
65
67
66
68
public void removeClient (Session session ) {
67
- log .debug ("Removing client: [{}]" , session .getRemoteAddress ());
69
+ log .debug ("(" + name + ") Removing client: [{}]" , session .getRemoteAddress ());
68
70
clientsConnected .removeIf (client -> client .session .equals (session ));
69
71
clientsQuarantined .removeIf (client -> client .session .equals (session ));
70
72
}
71
73
72
74
public WsConnectContext getClient (Session session ) {
73
- log .debug ("Getting client: [{}]" , session .getRemoteAddress ());
75
+ log .debug ("(" + name + ") Getting client: [{}]" , session .getRemoteAddress ());
74
76
return clientsConnected .stream ().filter (client -> client .session .equals (session )).findFirst ().orElse (null );
75
77
}
76
78
77
79
public WsConnectContext getQuarantinedClient (Session session ) {
78
- log .debug ("Getting quarantined client: [{}]" , session .getRemoteAddress ());
80
+ log .debug ("(" + name + ") Getting quarantined client: [{}]" , session .getRemoteAddress ());
79
81
return clientsQuarantined .stream ().filter (client -> client .session .equals (session )).findFirst ().orElse (null );
80
82
}
81
83
82
84
public boolean isQuarantined (Session session ) {
83
- log .debug ("Checking if client is quarantined: [{}]" , session .getRemoteAddress ());
85
+ log .debug ("(" + name + ") Checking if client is quarantined: [{}]" , session .getRemoteAddress ());
84
86
return clientsQuarantined .stream ().anyMatch (client -> client .session .equals (session ));
85
87
}
86
88
87
89
public boolean isConnected (Session session ) {
88
- log .debug ("Checking if client is connected: [{}]" , session .getRemoteAddress ());
90
+ log .debug ("(" + name + ") Checking if client is connected: [{}]" , session .getRemoteAddress ());
89
91
return clientsConnected .stream ().anyMatch (client -> client .session .equals (session ));
90
92
}
91
93
92
94
@ Override
93
95
public void onConnect (WsConnectContext ctx ) throws Exception {
94
- log .debug ("New client tries to connect: [{}]" , ctx .session .getRemoteAddress ());
96
+ log .debug ("(" + name + ") New client tries to connect: [{}]" , ctx .session .getRemoteAddress ());
95
97
String token = ctx .header ("Authorization" );
96
98
if (token == null || token .isEmpty ()) {
97
- log .warn ("No token provided for client: [{}]\n Sending connection into quarantine." ,
99
+ log .warn ("(" + name + ") No token provided for client: [{}]\n Sending connection into quarantine." ,
98
100
ctx .session .getRemoteAddress ());
99
101
clientsQuarantined .add (ctx );
100
102
return ;
101
103
}
102
- log .debug ("New client token: [{}]" , token );
104
+ log .debug ("(" + name + ") New client token: [{}]" , token );
103
105
try {
104
106
String tenantId = tokenHandler .checkAccess (token );
105
107
tenantIdsBySession .put (ctx .session , tenantId );
106
108
clientsConnected .add (ctx );
107
109
} catch (Exception e ) {
108
- log .debug ("Token validation failed for client [{}]. Disconnecting." , ctx .session .getRemoteAddress (), e );
109
- ctx .session .close (1000 , "Unauthorized access with invalid token" );
110
+ log .debug ("(" + name + ") Token validation failed for client [{}]. Disconnecting." ,
111
+ ctx .session .getRemoteAddress (), e );
112
+ ctx .session .close (1000 , "(" + name + ") Unauthorized access with invalid token" );
110
113
return ;
111
114
}
112
115
}
@@ -116,29 +119,32 @@ public void onMsg(WsMessageContext ctx) throws Exception {
116
119
}
117
120
118
121
public final void onMessage (WsMessageContext ctx ) throws Exception {
119
- log .debug ("Received from [{}]: [{}]" , ctx .session .getRemoteAddress (), ctx .message ());
122
+ log .debug ("(" + name + ") Received from [{}]: [{}]" , ctx .session .getRemoteAddress (), ctx .message ());
120
123
if (isQuarantined (ctx .session )) {
121
- log .warn ("Client [{}] is quarantined, checking message for standard authorization-bearer-token." ,
124
+ log .warn (
125
+ "(" + name
126
+ + ") Client [{}] is quarantined, checking message for standard authorization-bearer-token." ,
122
127
ctx .session .getRemoteAddress ());
123
128
if (ctx .message () == null || !ctx .message ().startsWith ("Bearer " )) {
124
- log .warn ("Invalid message from quarantined client [{}]. Disconnecting." ,
129
+ log .warn ("(" + name + ") Invalid message from quarantined client [{}]. Disconnecting." ,
125
130
ctx .session .getRemoteAddress ());
126
131
removeClient (ctx .session );
127
- ctx .session .close (1000 , "Unauthorized access from quarantined client" );
132
+ ctx .session .close (1000 , "(" + name + ") Unauthorized access from quarantined client" );
128
133
return ;
129
134
}
130
135
try {
131
136
String tenantId = tokenHandler .checkAccess (ctx .message ());
132
137
tenantIdsBySession .put (ctx .session , tenantId );
133
138
WsConnectContext client = getQuarantinedClient (ctx .session );
134
- log .debug ("Client [{}] passed token validation. Moving from quarantine to connected." ,
139
+ log .debug ("(" + name + ") Client [{}] passed token validation. Moving from quarantine to connected." ,
135
140
ctx .session .getRemoteAddress ());
136
141
clientsQuarantined .removeIf (c -> c .session .equals (ctx .session ));
137
142
clientsConnected .add (client );
138
143
return ;
139
144
} catch (Exception e ) {
140
- log .debug ("Token validation failed for client [{}]. Disconnecting." , ctx .session .getRemoteAddress (), e );
141
- ctx .session .close (1000 , "Unauthorized access with invalid token" );
145
+ log .debug ("(" + name + ") Token validation failed for client [{}]. Disconnecting." ,
146
+ ctx .session .getRemoteAddress (), e );
147
+ ctx .session .close (1000 , "(" + name + ") Unauthorized access with invalid token" );
142
148
return ;
143
149
}
144
150
}
@@ -147,28 +153,30 @@ public final void onMessage(WsMessageContext ctx) throws Exception {
147
153
148
154
@ Override
149
155
public void onBinaryMessage (WsBinaryMessageContext ctx ) throws Exception {
150
- log .debug ("Received binary message from [{}]: [{}] bytes" , ctx .session .getRemoteAddress (), ctx .data ().length );
156
+ log .debug ("(" + name + ") Received binary message from [{}]: [{}] bytes" , ctx .session .getRemoteAddress (),
157
+ ctx .data ().length );
151
158
if (isQuarantined (ctx .session )) {
152
- log .warn ("Invalid Message from quarantined client [{}]. Disconnecting." , ctx .session .getRemoteAddress ());
159
+ log .warn ("(" + name + ") Invalid Message from quarantined client [{}]. Disconnecting." ,
160
+ ctx .session .getRemoteAddress ());
153
161
removeClient (ctx .session );
154
- ctx .session .close (1000 , "Unauthorized access from quarantined client" );
162
+ ctx .session .close (1000 , "(" + name + ") Unauthorized access from quarantined client" );
155
163
return ;
156
164
}
157
165
}
158
166
159
167
@ Override
160
168
public void onClose (WsCloseContext ctx ) throws Exception {
161
- log .debug ("Disconnected client: [{}]" , ctx .session .getRemoteAddress ());
169
+ log .debug ("(" + name + ") Disconnected client: [{}]" , ctx .session .getRemoteAddress ());
162
170
removeClient (ctx .session );
163
171
}
164
172
165
173
@ Override
166
174
public void onError (WsErrorContext ctx ) throws Exception {
167
175
Throwable t = ctx .error ();
168
176
if (t instanceof EOFException || t instanceof IOException ) {
169
- log .debug ("Client disconnected [{}]." , ctx .session .getRemoteAddress ());
177
+ log .debug ("(" + name + ") Client disconnected [{}]." , ctx .session .getRemoteAddress ());
170
178
} else {
171
- log .error ("Unexpected error on [{}]." , ctx .session .getRemoteAddress (), t );
179
+ log .error ("(" + name + ") Unexpected error on [{}]." , ctx .session .getRemoteAddress (), t );
172
180
}
173
181
removeClient (ctx .session );
174
182
}
0 commit comments