yangys
2024-05-18 cc0bdfb33ef638dfafe3185c92c7076d815e1c9b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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;
    }
}