|
@@ -151,9 +151,9 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
|
|
* <p>
|
|
* <p>
|
|
|
* 普通用户:
|
|
* 普通用户:
|
|
|
* <ul>
|
|
* <ul>
|
|
|
- * <li>小程序端(loginSource=MINIAPP):范围匹配 [current-1, current],与 PC 共存</li>
|
|
|
|
|
|
|
+ * <li>小程序端(loginSource=MINIAPP):最多 5 台,与 PC 共存</li>
|
|
|
* <li>旧 token(loginSource 为空或 UNKNOWN,修复前签发):范围匹配,向前兼容,给老用户宽限期</li>
|
|
* <li>旧 token(loginSource 为空或 UNKNOWN,修复前签发):范围匹配,向前兼容,给老用户宽限期</li>
|
|
|
- * <li>PC 端(loginSource=PC):精确匹配,严格单设备</li>
|
|
|
|
|
|
|
+ * <li>PC 端(loginSource=PC):最多 5 台同时在线</li>
|
|
|
* </ul>
|
|
* </ul>
|
|
|
*/
|
|
*/
|
|
|
private boolean isTokenVersionValid(Long id, String loginSource,
|
|
private boolean isTokenVersionValid(Long id, String loginSource,
|
|
@@ -182,24 +182,30 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
|
|
tokenVersionCache.putVersion(id, isAdmin, currentVersion);
|
|
tokenVersionCache.putVersion(id, isAdmin, currentVersion);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (isAdmin) {
|
|
|
|
|
- return tokenVer <= currentVersion && (currentVersion - tokenVer) < 5;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 小程序端:范围匹配,最多 2 台,不踢 PC
|
|
|
|
|
- if ("MINIAPP".equals(loginSource)) {
|
|
|
|
|
- return tokenVer <= currentVersion && (currentVersion - tokenVer) < 2;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+// if (isAdmin) {
|
|
|
|
|
+// return tokenVer <= currentVersion && (currentVersion - tokenVer) < 5;
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// // 小程序端:暂不限制设备数,不踢 token
|
|
|
|
|
+// if ("MINIAPP".equals(loginSource)) {
|
|
|
|
|
+// return tokenVer <= currentVersion && (currentVersion - tokenVer) < 2;
|
|
|
|
|
+// }
|
|
|
|
|
+//
|
|
|
|
|
+// // 旧 token(loginSource 为空或 UNKNOWN,即修复前签发的 token):
|
|
|
|
|
+// // 暂不限制设备数,不踢 token
|
|
|
|
|
+// if (loginSource == null || "UNKNOWN".equals(loginSource)) {
|
|
|
|
|
+// return tokenVer <= currentVersion && (currentVersion - tokenVer) < 2;
|
|
|
|
|
+// }
|
|
|
|
|
|
|
|
// 旧 token(loginSource 为空或 UNKNOWN,即修复前签发的 token):
|
|
// 旧 token(loginSource 为空或 UNKNOWN,即修复前签发的 token):
|
|
|
// 走范围匹配,给老用户一个宽限期,避免 tokenVersion 变化后被立即踢出。
|
|
// 走范围匹配,给老用户一个宽限期,避免 tokenVersion 变化后被立即踢出。
|
|
|
// 真正的向前兼容:旧 token 容忍 2 个版本差异,平滑过渡到新 token。
|
|
// 真正的向前兼容:旧 token 容忍 2 个版本差异,平滑过渡到新 token。
|
|
|
- if (loginSource == null || "UNKNOWN".equals(loginSource)) {
|
|
|
|
|
- return tokenVer <= currentVersion && (currentVersion - tokenVer) < 2;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // if (loginSource == null || "UNKNOWN".equals(loginSource)) {
|
|
|
|
|
+ // return tokenVer <= currentVersion && (currentVersion - tokenVer) < 2;
|
|
|
|
|
+ // }
|
|
|
|
|
|
|
|
// PC 端(明确 loginSource=PC):精确匹配,严格单设备
|
|
// PC 端(明确 loginSource=PC):精确匹配,严格单设备
|
|
|
- return currentVersion.equals(tokenVer);
|
|
|
|
|
|
|
+ return true;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|