deason 6 سال پیش
والد
کامیت
752682a194

+ 1 - 0
src/main/java/cn/com/qmth/examcloud/app/controller/version1/UserAuthRestController.java

@@ -47,6 +47,7 @@ public class UserAuthRestController {
             UserInfo userInfo = result.getData();
             loginInfo.setKey(userInfo.getKey());
             loginInfo.setToken(userInfo.getToken());
+            loginInfo.setAppToken(userInfo.getToken());
             userAuthService.cacheLoginInfo(loginInfo, userInfo.getKey());
             log.info(String.format("key:%s token:%s", userInfo.getKey(), userInfo.getToken()));
         }

+ 16 - 20
src/main/java/cn/com/qmth/examcloud/app/core/config/TokenFilter.java

@@ -51,17 +51,17 @@ public class TokenFilter implements Filter {
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
             throws IOException, ServletException {
         HttpServletRequest request = (HttpServletRequest) servletRequest;
-        HttpServletResponse response = (HttpServletResponse) servletResponse;
 
         //移动端设备请求必须带“设备编号”参数
-        String deviceId = request.getHeader(Constants.PARAM_DEVICE_ID);
+        /*String deviceId = request.getHeader(Constants.PARAM_DEVICE_ID);
         if (StringUtils.isBlank(deviceId)) {
             Result result = new Result().error("[APP] deviceId must be not empty.");
+            HttpServletResponse response = (HttpServletResponse) servletResponse;
             this.render(response, result.toString());
             return;
-        }
+        }*/
 
-        CustomHttpServletRequest customRequest = this.initCustomRequest(request, deviceId);
+        CustomHttpServletRequest customRequest = this.initCustomRequest(request);
         if (customRequest != null) {
             filterChain.doFilter(customRequest, servletResponse);
             return;
@@ -69,10 +69,11 @@ public class TokenFilter implements Filter {
         filterChain.doFilter(servletRequest, servletResponse);
     }
 
-    private CustomHttpServletRequest initCustomRequest(HttpServletRequest request, String deviceId) {
+    private CustomHttpServletRequest initCustomRequest(HttpServletRequest request) {
         String key = request.getHeader(Constants.PARAM_KEY);
-        if (StringUtils.isBlank(key)) {
-            //key为空,则不用过滤处理
+        String appToken = request.getHeader(Constants.PARAM_TOKEN);
+        if (StringUtils.isBlank(key) || StringUtils.isBlank(appToken)) {
+            //key,token为空,则不用过滤处理
             return null;
         }
 
@@ -83,22 +84,17 @@ public class TokenFilter implements Filter {
             return null;
         }
 
+        //同一个账号不同移动端设备,支持互踢
+        if (!appToken.equals(loginInfo.getAppToken())) {
+            //Token参数值无效
+            return null;
+        }
+
         //处理已登录信息
         CustomHttpServletRequest customRequest = new CustomHttpServletRequest(request);
         if (!this.filterAccessUrl(request.getServletPath())) {
-            /* 同一个账号不同移动端设备,支持互踢 */
-            if (deviceId.equals(loginInfo.getDeviceId())) {
-                //设备编号相同
-                if (loginInfo.hasExpired(PLATFORM_SESSION_EXPIRE_TIME)) {
-                    //判断原始的login token是否在有效时间内,若已超过有效时间,则自动登录续期
-                    this.reLogin(loginInfo);
-                }
-            } else {
-                //设备编号不同且Token在有效时间内,则互踢
-                if (!loginInfo.hasExpired(PLATFORM_SESSION_EXPIRE_TIME)) {
-                    return null;
-                }
-                loginInfo.setDeviceId(deviceId);
+            if (loginInfo.hasExpired(PLATFORM_SESSION_EXPIRE_TIME)) {
+                //判断原始的login token是否在有效时间内,若已超过有效时间,则自动登录续期
                 this.reLogin(loginInfo);
             }
         }

+ 9 - 0
src/main/java/cn/com/qmth/examcloud/app/model/LoginInfo.java

@@ -26,6 +26,7 @@ public class LoginInfo implements Serializable {
     private String domain;
     private String key;
     private String token;
+    private String appToken;
     private String deviceId;
     private Date createTime;
 
@@ -126,6 +127,14 @@ public class LoginInfo implements Serializable {
         this.token = token;
     }
 
+    public String getAppToken() {
+        return appToken;
+    }
+
+    public void setAppToken(String appToken) {
+        this.appToken = appToken;
+    }
+
     public String getDeviceId() {
         return deviceId;
     }