ApiSessionManager.java
4.25 KB
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package com.xiniunet.open.manager;
import com.xiniunet.apiframework.session.Session;
import com.xiniunet.apiframework.session.SessionManager;
import com.xiniunet.apiframework.session.SimpleSession;
import com.xiniunet.framework.security.Identity;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.framework.util.TypeTransferUtil;
import com.xiniunet.security.request.PassportGetRequest;
import com.xiniunet.security.response.PassportGetResponse;
import com.xiniunet.security.service.SecurityService;
import com.xiniunet.xntalk.request.IdentityGetRequest;
import com.xiniunet.xntalk.response.IdentityGetResponse;
import com.xiniunet.xntalk.service.UnionService;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
*
* @author xiniunet
*
*/
public class ApiSessionManager implements SessionManager {
private static final Map<String, Session> sessionCache = new ConcurrentHashMap<String, Session>(128, 0.75f, 32);
@Autowired
private SecurityService securityService;
@Autowired
private UnionService unionService;
@Override
public void addSession(String sessionId, Session session) {
sessionCache.put(sessionId, session);
}
@Override
public Session getSession(String sessionId) {
if (sessionId == null || sessionId.equals("null")) {
return null;
}
Session session = sessionCache.get(sessionId);
if (session != null) {
//验证SessionId 是否过期
Passport passport = (Passport) session.getAttribute("passport");
if (passport != null && !isExpire(passport.getExpireTime())) {
return session;
}
//验证SessionId 是否过期
Identity identity = (Identity) session.getAttribute("identity");
if(identity != null) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(identity.getIssueTime());
calendar.add(calendar.DATE, 1);
if (!isExpire(calendar.getTime())) {
return session;
}
}
//删除session信息
sessionCache.remove(sessionId);
return null;
} else {
PassportGetRequest request = new PassportGetRequest();
request.setId(Long.valueOf(sessionId));
PassportGetResponse response = securityService.getPassport(request);
if (response == null || response.hasError() || response.getPassport() == null) {
if (response.getPassport() == null) {
IdentityGetRequest request2 = new IdentityGetRequest();
request2.setId(Long.valueOf(sessionId));
IdentityGetResponse response2 = unionService.getIdentity(request2);
if (response2 == null || response2.hasError() || response2.getIdentity() == null) {
return null;
}
Identity identity = response2.getIdentity();
if (identity == null) {
return null;
}
session = new SimpleSession();
session.setAttribute("identity", identity);
sessionCache.put(sessionId, session);
return session;
}else{
return null;
}
} else {
Passport passport = new TypeTransferUtil<Passport>().transfer(response.getPassport(), Passport.class);
if (passport == null || isExpire(passport.getExpireTime())) {
return null;
}
session = new SimpleSession();
session.setAttribute("passport", passport);
sessionCache.put(sessionId, session);
return session;
}
}
}
@Override
public void removeSession(String sessionId) {
sessionCache.remove(sessionId);
}
//判断session是否过期
private boolean isExpire(Date date){
if(date==null||date.before(new Date())){
return true;
}
return false;
}
}