|
@@ -104,6 +104,11 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
*/
|
|
|
public static final String HEADER_FINGERPRINT = "Fingerprint";
|
|
|
|
|
|
+ /**
|
|
|
+ * 实际终端编号请求头
|
|
|
+ */
|
|
|
+ public static final String HEADER_ACTUAL_TERMINAL = "Actual-Terminal";
|
|
|
+
|
|
|
/**
|
|
|
* 空会话对象实例
|
|
|
*/
|
|
@@ -227,25 +232,6 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
return ObjectUtils.ifNull(getSession(requireSession), Session::getDevice);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 判断当前会话是否是首次请求
|
|
|
- *
|
|
|
- * @return true/false
|
|
|
- */
|
|
|
- public static boolean isInitial() {
|
|
|
- return isInitial(true);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 判断当前会话是否是首次请求
|
|
|
- *
|
|
|
- * @param requireSession 会话是否是必须
|
|
|
- * @return true/false
|
|
|
- */
|
|
|
- public static boolean isInitial(boolean requireSession) {
|
|
|
- return Boolean.TRUE.equals(ObjectUtils.ifNull(getSession(requireSession), Session::getInitial));
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取当前会话渠道来源
|
|
|
*
|
|
@@ -380,60 +366,41 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取请求时间戳
|
|
|
- *
|
|
|
- * @return 时间戳
|
|
|
- */
|
|
|
- public static Long getTimestamp() {
|
|
|
- return getTimestamp(true);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取请求时间戳
|
|
|
- *
|
|
|
- * @param requireSession 会话是否是必须
|
|
|
- * @return 时间戳
|
|
|
- */
|
|
|
- public static Long getTimestamp(boolean requireSession) {
|
|
|
- return ObjectUtils.ifNull(getSession(requireSession), Session::getTimestamp);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取当前会话签名信息
|
|
|
+ * 判断当前会话是否是首次请求
|
|
|
*
|
|
|
- * @return 签名信息
|
|
|
+ * @return true/false
|
|
|
*/
|
|
|
- public static String getSignature() {
|
|
|
- return getSignature(true);
|
|
|
+ public static boolean isInitial() {
|
|
|
+ return isInitial(true);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取当前会话签名信息
|
|
|
+ * 判断当前会话是否是首次请求
|
|
|
*
|
|
|
* @param requireSession 会话是否是必须
|
|
|
- * @return 签名信息
|
|
|
+ * @return true/false
|
|
|
*/
|
|
|
- public static String getSignature(boolean requireSession) {
|
|
|
- return ObjectUtils.ifNull(getSession(requireSession), Session::getSignature);
|
|
|
+ public static boolean isInitial(boolean requireSession) {
|
|
|
+ return Boolean.TRUE.equals(ObjectUtils.ifNull(getSession(requireSession), Session::getInitial));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取当前会话设备指纹
|
|
|
+ * 获取请求时间戳
|
|
|
*
|
|
|
- * @return 设备指纹
|
|
|
+ * @return 时间戳
|
|
|
*/
|
|
|
- public static String getFingerprint() {
|
|
|
- return getFingerprint(true);
|
|
|
+ public static Long getTimestamp() {
|
|
|
+ return getTimestamp(true);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取当前会话设备指纹
|
|
|
+ * 获取请求时间戳
|
|
|
*
|
|
|
* @param requireSession 会话是否是必须
|
|
|
- * @return 设备指纹
|
|
|
+ * @return 时间戳
|
|
|
*/
|
|
|
- public static String getFingerprint(boolean requireSession) {
|
|
|
- return ObjectUtils.ifNull(getSession(requireSession), Session::getFingerprint);
|
|
|
+ public static Long getTimestamp(boolean requireSession) {
|
|
|
+ return ObjectUtils.ifNull(getSession(requireSession), Session::getTimestamp);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -767,7 +734,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 身份标识
|
|
|
*/
|
|
|
- protected Long getId(HttpServletRequest request) {
|
|
|
+ protected Long getId(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_ID), Long::parseLong);
|
|
|
}
|
|
|
|
|
@@ -777,7 +744,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 主机地址
|
|
|
*/
|
|
|
- protected String getHost(HttpServletRequest request) {
|
|
|
+ protected String getHost(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(HttpUtils.getRequestAddress(request), (String) null);
|
|
|
}
|
|
|
|
|
@@ -787,7 +754,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 电话号码
|
|
|
*/
|
|
|
- protected String getMobile(HttpServletRequest request) {
|
|
|
+ protected String getMobile(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_MOBILE), (String) null);
|
|
|
}
|
|
|
|
|
@@ -797,27 +764,17 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 设备标识
|
|
|
*/
|
|
|
- protected String getDevice(HttpServletRequest request) {
|
|
|
+ protected String getDevice(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_DEVICE), (String) null);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 获取是否首次请求
|
|
|
- *
|
|
|
- * @param request Http请求对象
|
|
|
- * @return true/false
|
|
|
- */
|
|
|
- protected Boolean getInitial(HttpServletRequest request) {
|
|
|
- return StringUtils.ifEmpty(request.getHeader(HEADER_INITIAL), Boolean::parseBoolean);
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 获取客户端渠道来源
|
|
|
*
|
|
|
* @param request Http请求对象
|
|
|
* @return 渠道来源
|
|
|
*/
|
|
|
- protected String getChannel(HttpServletRequest request) {
|
|
|
+ protected String getChannel(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_CHANNEL), (String) null);
|
|
|
}
|
|
|
|
|
@@ -827,7 +784,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 平台标识
|
|
|
*/
|
|
|
- protected Platform getPlatform(HttpServletRequest request) {
|
|
|
+ protected Platform getPlatform(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_PLATFORM), Platform::valueOf);
|
|
|
}
|
|
|
|
|
@@ -837,7 +794,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 终端标识
|
|
|
*/
|
|
|
- protected Terminal getTerminal(HttpServletRequest request) {
|
|
|
+ protected Terminal getTerminal(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_TERMINAL), Terminal::valueOf);
|
|
|
}
|
|
|
|
|
@@ -847,7 +804,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 版本号
|
|
|
*/
|
|
|
- protected String getVersion(HttpServletRequest request) {
|
|
|
+ protected String getVersion(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_VERSION), (String) null);
|
|
|
}
|
|
|
|
|
@@ -857,7 +814,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 业务类型
|
|
|
*/
|
|
|
- protected String getBusiness(HttpServletRequest request) {
|
|
|
+ protected String getBusiness(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_BUSINESS), (String) null);
|
|
|
}
|
|
|
|
|
@@ -867,7 +824,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 客户端序号
|
|
|
*/
|
|
|
- protected Integer getSequence(HttpServletRequest request) {
|
|
|
+ protected Integer getSequence(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_SEQUENCE), Integer::parseInt);
|
|
|
}
|
|
|
|
|
@@ -877,38 +834,43 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
* @param request Http请求对象
|
|
|
* @return 授权信息
|
|
|
*/
|
|
|
- protected String getAuthority(HttpServletRequest request) {
|
|
|
+ protected String getAuthority(@NonNull HttpServletRequest request) {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_AUTHORITY), (String) null);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取请求时间戳
|
|
|
+ * 获取是否首次请求
|
|
|
*
|
|
|
* @param request Http请求对象
|
|
|
- * @return 时间戳
|
|
|
+ * @return true/false
|
|
|
*/
|
|
|
- protected Long getTimestamp(HttpServletRequest request) {
|
|
|
- return StringUtils.ifEmpty(request.getHeader(HEADER_TIMESTAMP), Long::parseLong);
|
|
|
+ protected Boolean getInitial(@NonNull HttpServletRequest request) {
|
|
|
+ return StringUtils.ifEmpty(request.getHeader(HEADER_INITIAL), Boolean::parseBoolean);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取签名信息
|
|
|
+ * 获取请求时间戳
|
|
|
*
|
|
|
* @param request Http请求对象
|
|
|
- * @return 签名信息
|
|
|
+ * @return 时间戳
|
|
|
*/
|
|
|
- protected String getSignature(HttpServletRequest request) {
|
|
|
- return StringUtils.ifEmpty(request.getHeader(HEADER_SIGNATURE), (String) null);
|
|
|
+ protected Long getTimestamp(@NonNull HttpServletRequest request) {
|
|
|
+ return StringUtils.ifEmpty(request.getHeader(HEADER_TIMESTAMP), Long::parseLong);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取设备指纹
|
|
|
+ * 初始化会话信息
|
|
|
*
|
|
|
* @param request Http请求对象
|
|
|
- * @return 设备指纹
|
|
|
+ * @return 会话信息
|
|
|
*/
|
|
|
- protected String getFingerprint(HttpServletRequest request) {
|
|
|
- return StringUtils.ifEmpty(request.getHeader(HEADER_FINGERPRINT), (String) null);
|
|
|
+ protected Session initializeSession(@NonNull HttpServletRequest request) {
|
|
|
+ return Session.builder().id(this.getId(request)).host(this.getHost(request)).mobile(this.getMobile(request))
|
|
|
+ .device(this.getDevice(request)).channel(this.getChannel(request)).platform(this.getPlatform(request))
|
|
|
+ .terminal(this.getTerminal(request)).version(this.getVersion(request))
|
|
|
+ .business(this.getBusiness(request)).sequence(this.getSequence(request))
|
|
|
+ .authority(this.getAuthority(request)).initial(this.getInitial(request))
|
|
|
+ .timestamp(this.getTimestamp(request)).build();
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -977,15 +939,13 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
session = Session.builder().id(id).business(business).mobile(mobile).authority(authority)
|
|
|
.host(ObjectUtils.ifNull(session, Session::getHost))
|
|
|
.device(ObjectUtils.ifNull(session, Session::getDevice))
|
|
|
- .initial(ObjectUtils.ifNull(session, Session::getInitial))
|
|
|
.channel(ObjectUtils.ifNull(session, Session::getChannel))
|
|
|
.platform(ObjectUtils.ifNull(session, Session::getPlatform))
|
|
|
.terminal(ObjectUtils.ifNull(session, Session::getTerminal))
|
|
|
.version(ObjectUtils.ifNull(session, Session::getVersion))
|
|
|
.sequence(ObjectUtils.ifNull(session, Session::getSequence))
|
|
|
.timestamp(ObjectUtils.ifNull(session, Session::getTimestamp))
|
|
|
- .signature(ObjectUtils.ifNull(session, Session::getSignature))
|
|
|
- .fingerprint(ObjectUtils.ifNull(session, Session::getFingerprint)).build();
|
|
|
+ .initial(ObjectUtils.ifNull(session, Session::getInitial)).build();
|
|
|
deque.poll();
|
|
|
deque.push(session);
|
|
|
}
|
|
@@ -994,15 +954,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
|
|
|
@Override
|
|
|
public void requestInitialized(ServletRequestEvent event) {
|
|
|
- HttpServletRequest request = (HttpServletRequest) event.getServletRequest();
|
|
|
- Session session = Session.builder().id(this.getId(request)).host(this.getHost(request))
|
|
|
- .mobile(this.getMobile(request)).device(this.getDevice(request)).initial(this.getInitial(request))
|
|
|
- .channel(this.getChannel(request)).platform(this.getPlatform(request))
|
|
|
- .terminal(this.getTerminal(request)).version(this.getVersion(request))
|
|
|
- .business(this.getBusiness(request)).sequence(this.getSequence(request))
|
|
|
- .authority(this.getAuthority(request)).timestamp(this.getTimestamp(request))
|
|
|
- .signature(this.getSignature(request)).fingerprint(this.getFingerprint(request)).build();
|
|
|
- setSession(session);
|
|
|
+ setSession(this.initializeSession((HttpServletRequest) event.getServletRequest()));
|
|
|
}
|
|
|
|
|
|
@Override
|