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