|
@@ -1,6 +1,8 @@
|
|
|
package org.ssssssss.magicapi.core.handler;
|
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.http.HttpHeaders;
|
|
|
import org.ssssssss.magicapi.core.annotation.Message;
|
|
|
import org.ssssssss.magicapi.core.config.Constants;
|
|
@@ -13,6 +15,7 @@ import org.ssssssss.magicapi.utils.IpUtils;
|
|
|
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
import java.util.Optional;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -27,6 +30,8 @@ public class MagicWorkbenchHandler {
|
|
|
|
|
|
private final static MagicUser guest = new MagicUser("guest","游客", "unauthorization");
|
|
|
|
|
|
+ private final static Logger logger = LoggerFactory.getLogger(MagicWorkbenchHandler.class);
|
|
|
+
|
|
|
public MagicWorkbenchHandler(AuthorizationInterceptor authorizationInterceptor) {
|
|
|
this.authorizationInterceptor = authorizationInterceptor;
|
|
|
}
|
|
@@ -46,6 +51,10 @@ public class MagicWorkbenchHandler {
|
|
|
String ip = Optional.ofNullable(session.getWebSocketSession().getRemoteAddress()).map(it -> it.getAddress().getHostAddress()).orElse("unknown");
|
|
|
HttpHeaders headers = session.getWebSocketSession().getHandshakeHeaders();
|
|
|
ip = IpUtils.getRealIP(ip, headers::getFirst, null);
|
|
|
+ if (user.getTimeout() > 0) {
|
|
|
+ session.setUser(user);
|
|
|
+ session.setTimeout(user.getTimeout() * 1000 + System.currentTimeMillis());
|
|
|
+ }
|
|
|
session.setAttribute(Constants.WEBSOCKET_ATTRIBUTE_USER_ID, user.getId());
|
|
|
session.setAttribute(Constants.WEBSOCKET_ATTRIBUTE_USER_IP, StringUtils.defaultIfBlank(ip, "unknown"));
|
|
|
session.setAttribute(Constants.WEBSOCKET_ATTRIBUTE_USER_NAME, user.getUsername());
|
|
@@ -78,8 +87,19 @@ public class MagicWorkbenchHandler {
|
|
|
}
|
|
|
|
|
|
@Message(MessageType.PONG)
|
|
|
- public void pong(MagicConsoleSession session){
|
|
|
+ public String pong(MagicConsoleSession session){
|
|
|
session.setActivateTime(System.currentTimeMillis());
|
|
|
+ MagicUser user = session.getUser();
|
|
|
+ if (user != null && session.getTimeout() - System.currentTimeMillis() < 60 * 1000){
|
|
|
+ String oldToken = user.getToken();
|
|
|
+ authorizationInterceptor.refreshToken(user);
|
|
|
+ String newToken = user.getToken();
|
|
|
+ session.setTimeout(System.currentTimeMillis() + user.getTimeout() * 1000);
|
|
|
+ if (!Objects.equals(newToken, oldToken)) {
|
|
|
+ WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.REFRESH_TOKEN, newToken));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
private List<Map<String, Object>> getOnlineUsers(){
|