package com.qianwen.core.websocket.custom; import com.qianwen.core.secure.BladeUser; import com.qianwen.core.tool.utils.Func; import com.qianwen.core.tool.utils.SpringUtil; import com.qianwen.core.websocket.config.ServerConfig; import com.qianwen.core.websocket.holder.SessionKeyGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.WebSocketSession; @Configuration public class MasterlinkSessionKeyGenerator implements SessionKeyGenerator { @Autowired(required = false) private ServiceInstance instance; @Autowired private ServerConfig serverConfig; @Override public Object sessionKey(WebSocketSession webSocketSession) { String host; int port; Object obj = webSocketSession.getAttributes().get("USER_KEY_ATTR_NAME"); if (Func.isEmpty(this.instance)) { port = ((ServerConfig) SpringUtil.getBean(ServerConfig.class)).getServerPort(); host = ((ServerConfig) SpringUtil.getBean(ServerConfig.class)).getHost(); } else { host = this.instance.getHost(); port = this.instance.getPort(); } if (obj instanceof BladeUser) { BladeUser user = (BladeUser) obj; return String.format("%s:%s:%s", host, Integer.valueOf(port), user.getUserId()); } return null; } }