mxd 3 лет назад
Родитель
Сommit
482150cf98

+ 32 - 30
magic-api/src/main/java/org/ssssssss/magicapi/core/handler/MagicWorkbenchHandler.java

@@ -3,19 +3,16 @@ package org.ssssssss.magicapi.core.handler;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.http.HttpHeaders;
 import org.ssssssss.magicapi.core.annotation.Message;
+import org.ssssssss.magicapi.core.config.Constants;
 import org.ssssssss.magicapi.core.config.MessageType;
 import org.ssssssss.magicapi.core.config.WebSocketSessionManager;
-import org.ssssssss.magicapi.core.exception.MagicLoginException;
-import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor;
-import org.ssssssss.magicapi.core.context.MagicUser;
-import org.ssssssss.magicapi.core.config.Constants;
 import org.ssssssss.magicapi.core.context.MagicConsoleSession;
-import org.ssssssss.magicapi.modules.servlet.RequestModule;
+import org.ssssssss.magicapi.core.context.MagicUser;
+import org.ssssssss.magicapi.core.interceptor.AuthorizationInterceptor;
 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;
 
@@ -36,33 +33,38 @@ public class MagicWorkbenchHandler {
 
 	@Message(MessageType.LOGIN)
 	public void onLogin(MagicConsoleSession session, String token, String clientId) {
+		session.setClientId(clientId);
+		MagicUser user = null;
 		try {
-			MagicUser user = guest;
-			session.setClientId(clientId);
-			if (!authorizationInterceptor.requireLogin() || (user = authorizationInterceptor.getUserByToken(token)) != null) {
-				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);
-				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());
-				session.setActivateTime(System.currentTimeMillis());
-				synchronized (MagicWorkbenchHandler.class){
-					if(WebSocketSessionManager.getConsoleSession(clientId) != null){
-						WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "-1"));
-						return;
-					}
-					WebSocketSessionManager.add(session);
-				}
-				WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "1", session.getAttributes()));
-				List<Map<String, Object>> messages = getOnlineUsers();
-				if(!messages.isEmpty()){
-					WebSocketSessionManager.sendByClientId(session.getClientId(), WebSocketSessionManager.buildMessage(MessageType.ONLINE_USERS, messages));
+			user = authorizationInterceptor.getUserByToken(token);
+		} catch (Exception e) {
+			if(!authorizationInterceptor.requireLogin()){
+				user = guest;
+			}
+		}
+		if (user != null) {
+			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);
+			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());
+			session.setActivateTime(System.currentTimeMillis());
+			synchronized (MagicWorkbenchHandler.class){
+				if(WebSocketSessionManager.getConsoleSession(clientId) != null){
+					WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "-1"));
+					return;
 				}
-				WebSocketSessionManager.sendToMachine(MessageType.SEND_ONLINE, session.getClientId());
-				WebSocketSessionManager.sendToOther(session.getClientId(), MessageType.USER_LOGIN, session.getAttributes());
+				WebSocketSessionManager.add(session);
+			}
+			WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "1", session.getAttributes()));
+			List<Map<String, Object>> messages = getOnlineUsers();
+			if(!messages.isEmpty()){
+				WebSocketSessionManager.sendByClientId(session.getClientId(), WebSocketSessionManager.buildMessage(MessageType.ONLINE_USERS, messages));
 			}
-		} catch (MagicLoginException ignored) {
+			WebSocketSessionManager.sendToMachine(MessageType.SEND_ONLINE, session.getClientId());
+			WebSocketSessionManager.sendToOther(session.getClientId(), MessageType.USER_LOGIN, session.getAttributes());
+		} else {
 			WebSocketSessionManager.sendBySession(session, WebSocketSessionManager.buildMessage(MessageType.LOGIN_RESPONSE, "0"));
 		}
 	}