Skip to content

Commit d6f95ee

Browse files
committed
优化websocket获取user信息
1 parent 5275487 commit d6f95ee

File tree

2 files changed

+20
-18
lines changed

2 files changed

+20
-18
lines changed

hsweb-web-websocket/src/main/java/org/hsweb/web/socket/message/SimpleWebSocketMessageManager.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.hsweb.web.core.exception.AuthorizeException;
55
import org.hsweb.web.core.session.HttpSessionManager;
66
import org.hsweb.web.socket.utils.SessionUtils;
7+
import org.springframework.beans.factory.annotation.Autowired;
78
import org.springframework.web.socket.TextMessage;
89
import org.springframework.web.socket.WebSocketSession;
910

@@ -26,17 +27,13 @@ public class SimpleWebSocketMessageManager implements WebSocketMessageManager {
2627

2728
private HttpSessionManager httpSessionManager;
2829

30+
@Autowired
2931
public void setHttpSessionManager(HttpSessionManager httpSessionManager) {
3032
this.httpSessionManager = httpSessionManager;
3133
}
3234

3335
public Map<String, WebSocketSession> getSessionMap(String userId) {
34-
Map<String, WebSocketSession> map = session_map.get(userId);
35-
if (map == null) {
36-
map = Collections.synchronizedMap(new HashMap<>());
37-
session_map.put(userId, map);
38-
}
39-
return map;
36+
return session_map.computeIfAbsent(userId, k -> Collections.synchronizedMap(new HashMap<>()));
4037
}
4138

4239
@Override

hsweb-web-websocket/src/main/java/org/hsweb/web/socket/utils/SessionUtils.java

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
import org.springframework.http.HttpHeaders;
66
import org.springframework.web.socket.WebSocketSession;
77

8-
import java.util.HashMap;
9-
import java.util.List;
10-
import java.util.Map;
8+
import java.util.*;
9+
import java.util.function.Function;
1110

1211
/**
1312
* Created by zhouhao on 16-5-30.
1413
*/
1514
public class SessionUtils {
1615
public static User getUser(WebSocketSession session, HttpSessionManager sessionManager) {
16+
if (sessionManager == null) return null;
1717
User user = ((User) session.getAttributes().get("user"));
1818
if (user != null) return user;
1919
HttpHeaders headers = session.getHandshakeHeaders();
@@ -22,16 +22,21 @@ public static User getUser(WebSocketSession session, HttpSessionManager sessionM
2222
return null;
2323
}
2424
String[] cookie = cookies.get(0).split("[;]");
25-
Map<String, Object> sessionId = new HashMap<>();
26-
for (int i = 0; i < cookie.length; i++) {
27-
String[] tmp = cookie[i].split("[=]");
25+
Map<String, Set<String>> sessionId = new HashMap<>();
26+
for (String aCookie : cookie) {
27+
String[] tmp = aCookie.split("[=]");
2828
if (tmp.length == 2)
29-
sessionId.put(tmp[0].trim(), tmp[1].trim());
29+
sessionId.computeIfAbsent(tmp[0].trim(), k -> new HashSet<>())
30+
.add(tmp[1].trim());
3031
}
31-
user = sessionManager.getUserBySessionId((String) sessionId.get("SESSION"));
32-
if (user == null) {
33-
user = sessionManager.getUserBySessionId((String) sessionId.get("JSESSIONID"));
34-
}
35-
return user;
32+
33+
Function<Set<String>, Optional<User>> userGetter = set ->
34+
set == null ? Optional.empty() : set.stream()
35+
.map(sessionManager::getUserBySessionId)
36+
.filter(Objects::nonNull).findFirst();
37+
38+
return userGetter.apply(sessionId.get("SESSION"))
39+
.orElseGet(() -> userGetter.apply(sessionId.get("JSESSIONID")).orElse(null));
40+
3641
}
3742
}

0 commit comments

Comments
 (0)