|
@@ -94,6 +94,11 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
*/
|
|
|
public static final String HEADER_SIGNATURE = "Signature";
|
|
|
|
|
|
+ /**
|
|
|
+ * 设备指纹请求头
|
|
|
+ */
|
|
|
+ public static final String HEADER_FINGERPRINT = "Fingerprint";
|
|
|
+
|
|
|
/**
|
|
|
* 空会话对象实例
|
|
|
*/
|
|
@@ -175,9 +180,9 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
*/
|
|
|
public static Session initializeSessionPrincipal(@NonNull Long id, @NonNull String business, String mobile,
|
|
|
boolean cover) {
|
|
|
- Session session = null;
|
|
|
- Deque<Session> deque = null;
|
|
|
- if (cover || ObjectUtils.ifNull(session = (deque = SESSION_CONTEXT.get()).peek(), Session::getId) == null) {
|
|
|
+ Deque<Session> deque = SESSION_CONTEXT.get();
|
|
|
+ Session session = deque.peek();
|
|
|
+ if (cover || ObjectUtils.ifNull(session, Session::getId) == null) {
|
|
|
session = Session.builder().id(id).business(business).mobile(mobile)
|
|
|
.host(ObjectUtils.ifNull(session, Session::getHost))
|
|
|
.device(ObjectUtils.ifNull(session, Session::getDevice))
|
|
@@ -188,10 +193,8 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
.terminal(ObjectUtils.ifNull(session, Session::getTerminal))
|
|
|
.version(ObjectUtils.ifNull(session, Session::getVersion))
|
|
|
.sequence(ObjectUtils.ifNull(session, Session::getSequence))
|
|
|
- .signature(ObjectUtils.ifNull(session, Session::getSignature)).build();
|
|
|
- if (deque == null) {
|
|
|
- deque = SESSION_CONTEXT.get();
|
|
|
- }
|
|
|
+ .signature(ObjectUtils.ifNull(session, Session::getSignature))
|
|
|
+ .fingerprint(ObjectUtils.ifNull(session, Session::getFingerprint)).build();
|
|
|
deque.poll();
|
|
|
deque.push(session);
|
|
|
}
|
|
@@ -407,6 +410,25 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
return ObjectUtils.ifNull(getSession(requireSession), Session::getBusiness);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取当前终端序列号
|
|
|
+ *
|
|
|
+ * @return 序列号
|
|
|
+ */
|
|
|
+ public static Integer getSequence() {
|
|
|
+ return getSequence(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取当前终端序列号
|
|
|
+ *
|
|
|
+ * @param requireSession 会话是否是必须
|
|
|
+ * @return 序列号
|
|
|
+ */
|
|
|
+ public static Integer getSequence(boolean requireSession) {
|
|
|
+ return ObjectUtils.ifNull(getSession(requireSession), Session::getSequence);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取当前会话签名信息
|
|
|
*
|
|
@@ -427,22 +449,22 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取当前终端序列号
|
|
|
+ * 获取当前会话设备指纹
|
|
|
*
|
|
|
- * @return 序列号
|
|
|
+ * @return 设备指纹
|
|
|
*/
|
|
|
- public static Integer getSequence() {
|
|
|
- return getSequence(true);
|
|
|
+ public static String getFingerprint() {
|
|
|
+ return getFingerprint(true);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取当前终端序列号
|
|
|
+ * 获取当前会话设备指纹
|
|
|
*
|
|
|
* @param requireSession 会话是否是必须
|
|
|
- * @return 序列号
|
|
|
+ * @return 设备指纹
|
|
|
*/
|
|
|
- public static Integer getSequence(boolean requireSession) {
|
|
|
- return ObjectUtils.ifNull(getSession(requireSession), Session::getSequence);
|
|
|
+ public static String getFingerprint(boolean requireSession) {
|
|
|
+ return ObjectUtils.ifNull(getSession(requireSession), Session::getFingerprint);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -880,6 +902,16 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
return StringUtils.ifEmpty(request.getHeader(HEADER_BUSINESS), (String) null);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取客户端序号
|
|
|
+ *
|
|
|
+ * @param request Http请求对象
|
|
|
+ * @return 客户端序号
|
|
|
+ */
|
|
|
+ protected Integer getSequence(HttpServletRequest request) {
|
|
|
+ return StringUtils.ifEmpty(request.getHeader(HEADER_SEQUENCE), Integer::parseInt);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 获取签名信息
|
|
|
*
|
|
@@ -891,13 +923,13 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取客户端序号
|
|
|
+ * 获取设备指纹
|
|
|
*
|
|
|
* @param request Http请求对象
|
|
|
- * @return 客户端序号
|
|
|
+ * @return 设备指纹
|
|
|
*/
|
|
|
- protected Integer getSequence(HttpServletRequest request) {
|
|
|
- return StringUtils.ifEmpty(request.getHeader(HEADER_SEQUENCE), Integer::parseInt);
|
|
|
+ protected String getFingerprint(HttpServletRequest request) {
|
|
|
+ return StringUtils.ifEmpty(request.getHeader(HEADER_FINGERPRINT), (String) null);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -908,7 +940,7 @@ public class SessionContextHolder implements ServletRequestListener {
|
|
|
.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))
|
|
|
- .signature(this.getSignature(request)).build();
|
|
|
+ .signature(this.getSignature(request)).fingerprint(this.getFingerprint(request)).build();
|
|
|
setSession(session);
|
|
|
}
|
|
|
|