0%

Spring重写Cookie解析

Spring重写Cookie解析

SessionId是什么

SessionId是在访问网站期间为用户分配的特定的一串唯一编号。会话ID可以存储为cookie,表单字段或URL中。session在访问服务器的时候就被创建,之后会被客户端
保存在cookie当中,之后访问都会将session再次回传到服务器上用于标示请求所属。服务器接收到客户端的请求解析请求头中的cookie对应的sessionId,再由sessionId找到对应的session

解析

默认的sessionId的key字段是SESSION,默认的解析器是DefaultCookieSerializer,在一些情况下key可能是其他的一些值,这个时候就需要去重写DefaultCookieSerializer来达到自定义的session解析的目的。
多系统的多点登陆可以使用自定义字段来定义。

比如A、B、C 三个系统所属同一个域名,但是A、B、C可以使用不同的账户同时登陆,这个时候就能够使用自定义解析来达到这个目的。

通过APPID,来标示是从哪个系统来的,并且找出这个APPID对应独立的sessionId

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

@Bean
public DefaultCookieSerializer cookieWebSessionIdResolver() {

return new DefaultCookieSerializer() {
@Override
public List<String> readCookieValues(HttpServletRequest request) {
String appId = request.getHeader('APPID');
String name = "JSESSIONID-SSO-" + appId;
Cookie[] cookies = request.getCookies();
List<String> matchingCookieValues = new ArrayList<>();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (name.equals(cookie.getName())) {
String sessionId = cookie.getValue();
if (sessionId == null) {
continue;
}
matchingCookieValues.add(sessionId);
}
}
}
return matchingCookieValues;
}
};
}