5
5
import org .springframework .http .HttpHeaders ;
6
6
import org .springframework .web .socket .WebSocketSession ;
7
7
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 ;
11
10
12
11
/**
13
12
* Created by zhouhao on 16-5-30.
14
13
*/
15
14
public class SessionUtils {
16
15
public static User getUser (WebSocketSession session , HttpSessionManager sessionManager ) {
16
+ if (sessionManager == null ) return null ;
17
17
User user = ((User ) session .getAttributes ().get ("user" ));
18
18
if (user != null ) return user ;
19
19
HttpHeaders headers = session .getHandshakeHeaders ();
@@ -22,16 +22,21 @@ public static User getUser(WebSocketSession session, HttpSessionManager sessionM
22
22
return null ;
23
23
}
24
24
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 ("[=]" );
28
28
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 ());
30
31
}
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
+
36
41
}
37
42
}
0 commit comments