diff --git a/src/main/java/com/corundumstudio/socketio/AuthorizationListener.java b/src/main/java/com/corundumstudio/socketio/AuthorizationListener.java
index 886a076ce..261ae2316 100644
--- a/src/main/java/com/corundumstudio/socketio/AuthorizationListener.java
+++ b/src/main/java/com/corundumstudio/socketio/AuthorizationListener.java
@@ -15,14 +15,17 @@
*/
package com.corundumstudio.socketio;
+import java.util.Map;
+
public interface AuthorizationListener {
/**
* Checks is client with handshake data is authorized
*
* @param data - handshake data
+ * @param saveData - data need to save to store
* @return - true if client is authorized of false otherwise
*/
- boolean isAuthorized(HandshakeData data);
+ boolean isAuthorized(HandshakeData data, Map saveData);
}
diff --git a/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java b/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java
index b91859561..5fb99d82f 100644
--- a/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java
+++ b/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java
@@ -145,14 +145,15 @@ private boolean authorize(ChannelHandlerContext ctx, Channel channel, String ori
headers.put(name, values);
}
- HandshakeData data = new HandshakeData(req.headers(), params,
+ HandshakeData handshakeData = new HandshakeData(req.headers(), params,
(InetSocketAddress)channel.remoteAddress(),
(InetSocketAddress)channel.localAddress(),
req.uri(), origin != null && !origin.equalsIgnoreCase("null"));
boolean result = false;
+ Map saveData = new HashMap();
try {
- result = configuration.getAuthorizationListener().isAuthorized(data);
+ result = configuration.getAuthorizationListener().isAuthorized(handshakeData, saveData);
} catch (Exception e) {
log.error("Authorization error", e);
}
@@ -187,7 +188,8 @@ private boolean authorize(ChannelHandlerContext ctx, Channel channel, String ori
return false;
}
- ClientHead client = new ClientHead(sessionId, ackManager, disconnectable, storeFactory, data, clientsBox, transport, disconnectScheduler, configuration);
+
+ ClientHead client = new ClientHead(sessionId, ackManager, disconnectable, storeFactory, handshakeData, saveData, clientsBox, transport, disconnectScheduler, configuration);
channel.attr(ClientHead.CLIENT).set(client);
clientsBox.addClient(client);
diff --git a/src/main/java/com/corundumstudio/socketio/handler/ClientHead.java b/src/main/java/com/corundumstudio/socketio/handler/ClientHead.java
index f3b05e1a1..34e63a8d7 100644
--- a/src/main/java/com/corundumstudio/socketio/handler/ClientHead.java
+++ b/src/main/java/com/corundumstudio/socketio/handler/ClientHead.java
@@ -70,7 +70,7 @@ public class ClientHead {
private volatile Transport currentTransport;
public ClientHead(UUID sessionId, AckManager ackManager, DisconnectableHub disconnectable,
- StoreFactory storeFactory, HandshakeData handshakeData, ClientsBox clientsBox, Transport transport, CancelableScheduler disconnectScheduler,
+ StoreFactory storeFactory, HandshakeData handshakeData, Map saveData, ClientsBox clientsBox, Transport transport, CancelableScheduler disconnectScheduler,
Configuration configuration) {
this.sessionId = sessionId;
this.ackManager = ackManager;
@@ -81,7 +81,9 @@ public ClientHead(UUID sessionId, AckManager ackManager, DisconnectableHub disco
this.currentTransport = transport;
this.disconnectScheduler = disconnectScheduler;
this.configuration = configuration;
-
+ for(Map.Entry entry : saveData.entrySet()) {
+ this.store.set(entry.getKey(), entry.getValue());
+ }
channels.put(Transport.POLLING, new TransportState());
channels.put(Transport.WEBSOCKET, new TransportState());
}
diff --git a/src/main/java/com/corundumstudio/socketio/handler/SuccessAuthorizationListener.java b/src/main/java/com/corundumstudio/socketio/handler/SuccessAuthorizationListener.java
index dfded95ce..7dc5444da 100644
--- a/src/main/java/com/corundumstudio/socketio/handler/SuccessAuthorizationListener.java
+++ b/src/main/java/com/corundumstudio/socketio/handler/SuccessAuthorizationListener.java
@@ -18,11 +18,12 @@
import com.corundumstudio.socketio.AuthorizationListener;
import com.corundumstudio.socketio.HandshakeData;
+import java.util.Map;
+
public class SuccessAuthorizationListener implements AuthorizationListener {
@Override
- public boolean isAuthorized(HandshakeData data) {
+ public boolean isAuthorized(HandshakeData data, Map saveData) {
return true;
}
-
}