deason 7 anni fa
parent
commit
328fa648b2

+ 5 - 5
src/main/java/cn/com/qmth/examcloud/app/controller/version_1_0/UserAuthRestController.java

@@ -8,6 +8,7 @@
 package cn.com.qmth.examcloud.app.controller.version_1_0;
 
 import cn.com.qmth.examcloud.app.core.utils.StrUtils;
+import cn.com.qmth.examcloud.app.model.LoginType;
 import cn.com.qmth.examcloud.app.model.Result;
 import cn.com.qmth.examcloud.app.model.UserInfo;
 import cn.com.qmth.examcloud.app.model.UserToken;
@@ -22,8 +23,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 
-import static cn.com.qmth.examcloud.app.model.Constants.COMMON_ACCOUNT_TYPE;
-import static cn.com.qmth.examcloud.app.model.Constants.REDIS_EXPIRE_TIME;
+import static cn.com.qmth.examcloud.app.model.Constants.APP_SESSION_EXPIRE_TIME;
 
 /**
  * 认证中心相关接口
@@ -47,17 +47,17 @@ public class UserAuthRestController {
     public Result<UserInfo> login(@RequestParam String account, @RequestParam String password, @RequestParam(required = false) String accountType,
                                   @RequestParam(required = false) Long rootOrgId, @RequestParam(required = false) String domain) throws Exception {
         if (accountType == null) {
-            accountType = COMMON_ACCOUNT_TYPE;
+            accountType = LoginType.COMMON_LOGIN_NAME.name();
         }
         Result<UserInfo> result = userAuthService.login(account, password, accountType, rootOrgId, domain);
-        /*if (result.isSuccess()) {
+       /*if (result.isSuccess()) {
             //获取当前登录用户信息
             UserInfo userInfo = result.getData();
             //封装原始登录信息
             UserToken userToken = new UserToken(account, password, accountType, rootOrgId, domain, userInfo.getKey(), userInfo.getToken());
             //将原始登录信息存放到Redis中
             String redisKey = StrUtils.md5Key(userInfo.getKey());
-            redisService.cacheUserToken(redisKey, userToken, REDIS_EXPIRE_TIME);
+            redisService.cacheUserToken(redisKey, userToken, APP_SESSION_EXPIRE_TIME);
             log.debug("redisKey:" + redisKey + " loginToken:" + userToken.getToken());
             //替换login token为缓存的redisKey,并作为接口的结果返回
             userInfo.setToken(redisKey);

+ 6 - 7
src/main/java/cn/com/qmth/examcloud/app/core/config/AccessInterceptor.java

@@ -46,11 +46,11 @@ public class AccessInterceptor extends HandlerInterceptorAdapter {
         //用户带的login token实际为缓存的redisKey
         /*String redisKey = record.getLoginToken();
         if (StringUtils.isNotBlank(redisKey)) {
-            //通过redisKey获取原始的登录信息
+            //通过redisKey获取原始的登录信息,userToken为null则代表尚未登录
             UserToken userToken = redisService.getUserToken(redisKey);
             if (userToken != null) {
                 //判断原始的login token是否在有效时间内
-                if (userToken.hasExpired(PLATFORM_EXPIRED)) {
+                if (userToken.hasExpired(PLATFORM_SESSION_EXPIRE_TIME)) {
                     //已超过有效时间,则自动登录续期
                     Result<UserInfo> result = userAuthService.login(userToken.getAccount(), userToken.getPassword(),
                             userToken.getAccountType(), userToken.getRootOrgId(), userToken.getDomain());
@@ -59,16 +59,15 @@ public class AccessInterceptor extends HandlerInterceptorAdapter {
                         //登录成功后缓存新的login token
                         log.debug("redisKey:" + redisKey + " newLoginToken:" + userToken.getToken());
                         userToken.setToken(userInfo.getToken());
-                        redisService.cacheUserToken(redisKey, userToken, REDIS_EXPIRE_TIME);
+                        redisService.cacheUserToken(redisKey, userToken, APP_SESSION_EXPIRE_TIME);
                     }
                 }
                 //将login token绑定到request请求中
                 request.setAttribute("loginToken", userToken.getToken());
             }
-            //else null 则代表尚未登录
+            //初始化内部接口鉴权
+            //redisService.initTraceRequest();
         }*/
-        //初始化内部接口鉴权
-        //redisService.initTraceRequest();
         //异步保存设备访问记录
         deviceRecordService.addDeviceRecord(record);
         return true;
@@ -118,7 +117,7 @@ public class AccessInterceptor extends HandlerInterceptorAdapter {
             String[] values = entry.getValue();
             params.append("&").append(name).append("=");
             if (values.length > 0) {
-                if (PASSWORD.equalsIgnoreCase(name)) {
+                if (PARAM_PASSWORD.equalsIgnoreCase(name)) {
                     params.append("***");
                 } else {
                     params.append(values[0]);

+ 6 - 6
src/main/java/cn/com/qmth/examcloud/app/core/utils/HttpUtils.java

@@ -34,8 +34,8 @@ public class HttpUtils {
                 .get()
                 .addHeader(PARAM_KEY, key)
                 .addHeader(PARAM_TOKEN, token)
-                .addHeader(TRACE_ID, ThreadUtils.getTraceID())
-                .addHeader($CLIENT, $CLIENT_VALUE)
+                .addHeader(PARAM_TRACE_ID, ThreadUtils.getTraceID())
+                .addHeader(PARAM_CLIENT, PARAM_CLIENT_VALUE)
                 .addHeader(PARAM_TOKEN, token)
                 .build();
 
@@ -51,8 +51,8 @@ public class HttpUtils {
                 .post(formBody)
                 .addHeader(PARAM_KEY, key)
                 .addHeader(PARAM_TOKEN, token)
-                .addHeader(TRACE_ID, ThreadUtils.getTraceID())
-                .addHeader($CLIENT, $CLIENT_VALUE)
+                .addHeader(PARAM_TRACE_ID, ThreadUtils.getTraceID())
+                .addHeader(PARAM_CLIENT, PARAM_CLIENT_VALUE)
                 .build();
         //执行请求
         log.debug("[POST] " + requestUrl);
@@ -66,8 +66,8 @@ public class HttpUtils {
                 .put(formBody)
                 .addHeader(PARAM_KEY, key)
                 .addHeader(PARAM_TOKEN, token)
-                .addHeader(TRACE_ID, ThreadUtils.getTraceID())
-                .addHeader($CLIENT, $CLIENT_VALUE)
+                .addHeader(PARAM_TRACE_ID, ThreadUtils.getTraceID())
+                .addHeader(PARAM_CLIENT, PARAM_CLIENT_VALUE)
                 .build();
         //执行请求
         log.debug("[PUT] " + requestUrl);

+ 34 - 26
src/main/java/cn/com/qmth/examcloud/app/model/Constants.java

@@ -15,38 +15,46 @@ package cn.com.qmth.examcloud.app.model;
  */
 public interface Constants {
 
-    /* 过期时长,单位为秒 */
-    int REDIS_EXPIRE_TIME = 3600 * 24 * 30;//一个月
-
-    String REDIS_KEY_PREFIX = "appSessionUser:";
-
-    int PLATFORM_EXPIRED = 2;//平台端的默认过期时间(小时)
-
-    String SESSION_TIMEOUT = "$_SESSION_TIMEOUT";
-
+    /**
+     * APP端的Token默认过期时间(秒)
+     * 默认一个月
+     */
+    int APP_SESSION_EXPIRE_TIME = 3600 * 24 * 30;
+
+    /**
+     * APP端用户登录信息的redis key前缀
+     */
+    String APP_SESSION_USER_KEY_PREFIX = "appSessionUser:";
+
+    /**
+     * 平台端的Token默认过期时间(秒)
+     * 默认两小时
+     */
+    int PLATFORM_SESSION_EXPIRE_TIME = 7200;
+
+    /**
+     * 平台端的Token默认过期时间的redis key
+     */
+    String PLATFORM_SESSION_TIMEOUT_KEY = "$_SESSION_TIMEOUT";
+
+    /**
+     * 请求格式与默认编码集
+     */
     String CHARSET_JSON_UTF8 = "application/json; charset=utf-8";
 
+    /* 默认请求的Header参数 */
     String PARAM_KEY = "key";
-
     String PARAM_TOKEN = "token";
+    String PARAM_TRACE_ID = "TRACE_ID";
+    String PARAM_CLIENT = "$spring_cloud_client";
+    String PARAM_CLIENT_VALUE = "-";
+    String PARAM_PASSWORD = "password";
 
-    String TRACE_ID = "TRACE_ID";
-
-    String $CLIENT = "$spring_cloud_client";
-
-    String $CLIENT_VALUE = "-";
-
-    String TYPE_ZIP = "zip";
-
-    String TYPE_PDF = "pdf";
-
-    String COMMON_ACCOUNT_TYPE = "COMMON_LOGIN_NAME";
-
-    String STUDENT_ACCOUNT_TYPE = "STUDENT_CODE";
-
-    String PASSWORD = "password";
+    /* 常用的文件类型 */
+    String FILE_TYPE_ZIP = "zip";
+    String FILE_TYPE_PDF = "pdf";
 
-    /* 常用状态码 */
+    /* 系统状态码 */
     String CODE_0 = "0";//错误
     String CODE_200 = "200";//成功
     String CODE_500 = "500";//失败

+ 33 - 0
src/main/java/cn/com/qmth/examcloud/app/model/LoginType.java

@@ -0,0 +1,33 @@
+/*
+ * *************************************************
+ * Copyright (c) 2018 QMTH. All Rights Reserved.
+ * Created by Deason on 2018-07-31 16:20:47.
+ * *************************************************
+ */
+
+package cn.com.qmth.examcloud.app.model;
+
+/**
+ * 登录类型枚举类
+ *
+ * @author: fengdesheng
+ * @since: 2018/7/31
+ */
+public enum LoginType {
+
+    /**
+     * 普通账号登录
+     */
+    COMMON_LOGIN_NAME,
+
+    /**
+     * 学号登录
+     */
+    STUDENT_CODE,
+
+    /**
+     * 手机号登录
+     */
+    PHONE_LOGIN
+
+}

+ 2 - 2
src/main/java/cn/com/qmth/examcloud/app/model/UserToken.java

@@ -38,13 +38,13 @@ public class UserToken implements Serializable {
 
     }
 
-    public boolean hasExpired(int hours) {
+    public boolean hasExpired(int seconds) {
         if (createTime == null) {
             return true;
         }
         Calendar c = Calendar.getInstance();
         c.setTime(createTime);
-        c.add(Calendar.HOUR, hours);
+        c.add(Calendar.SECOND, seconds);
         //判断是否在n小时内
         if (c.getTime().after(new Date())) {
             return false;

+ 6 - 2
src/main/java/cn/com/qmth/examcloud/app/service/DeviceRecordService.java

@@ -93,8 +93,12 @@ public class DeviceRecordService {
                 }
             };
         }
-        if (pageNo < 1) pageNo = 1;
-        if (pageSize < 1) pageSize = 1;
+        if (pageNo < 1) {
+            pageNo = 1;
+        }
+        if (pageSize < 1) {
+            pageSize = 1;
+        }
         Sort sort = new Sort(Sort.Direction.DESC, "id");
         Pageable pageable = new PageRequest(pageNo - 1, pageSize, sort);
         Page<DeviceRecord> page = deviceRecordRepository.findAll(spec, pageable);

+ 3 - 3
src/main/java/cn/com/qmth/examcloud/app/service/NetExamService.java

@@ -27,8 +27,8 @@ import org.springframework.util.Assert;
 import java.util.HashMap;
 import java.util.Map;
 
-import static cn.com.qmth.examcloud.app.model.Constants.TYPE_PDF;
-import static cn.com.qmth.examcloud.app.model.Constants.TYPE_ZIP;
+import static cn.com.qmth.examcloud.app.model.Constants.FILE_TYPE_PDF;
+import static cn.com.qmth.examcloud.app.model.Constants.FILE_TYPE_ZIP;
 
 /**
  * 网考业务服务接口
@@ -66,7 +66,7 @@ public class NetExamService {
         Assert.notNull(examRecordId, "FileName must not be null.");
         Assert.notNull(fileName, "ExamRecordId must not be null.");
         String fileType = FilenameUtils.getExtension(fileName.toLowerCase());
-        if (!TYPE_ZIP.equals(fileType) && !TYPE_PDF.equals(fileType)) {
+        if (!FILE_TYPE_ZIP.equals(fileType) && !FILE_TYPE_PDF.equals(fileType)) {
             throw new ApiException("FileType must be zip or pdf.");
         }
         if (fileBytes.length == 0) {

+ 20 - 4
src/main/java/cn/com/qmth/examcloud/app/service/RedisService.java

@@ -3,6 +3,7 @@ package cn.com.qmth.examcloud.app.service;
 import cn.com.qmth.examcloud.app.core.exception.ApiException;
 import cn.com.qmth.examcloud.app.core.utils.JsonMapper;
 import cn.com.qmth.examcloud.app.core.utils.ThreadUtils;
+import cn.com.qmth.examcloud.app.model.Constants;
 import cn.com.qmth.examcloud.app.model.UserToken;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -13,7 +14,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.concurrent.TimeUnit;
 
-import static cn.com.qmth.examcloud.app.model.Constants.REDIS_KEY_PREFIX;
+import static cn.com.qmth.examcloud.app.model.Constants.APP_SESSION_USER_KEY_PREFIX;
 
 /**
  * @author: fengdesheng
@@ -54,7 +55,7 @@ public class RedisService {
         if (key == null) {
             throw new ApiException("Key must be not null.");
         }
-        this.set(REDIS_KEY_PREFIX + key, new JsonMapper().toJson(value), seconds);
+        this.set(APP_SESSION_USER_KEY_PREFIX + key, new JsonMapper().toJson(value), seconds);
     }
 
     /**
@@ -64,7 +65,7 @@ public class RedisService {
         if (key == null) {
             throw new ApiException("Key must be not null.");
         }
-        String value = this.get(REDIS_KEY_PREFIX + key);
+        String value = this.get(APP_SESSION_USER_KEY_PREFIX + key);
         if (value != null) {
             return new JsonMapper().fromJson(value, UserToken.class);
         }
@@ -77,7 +78,22 @@ public class RedisService {
     public void initTraceRequest() {
         String key = "C_" + ThreadUtils.getTraceID();
         Long millis = System.currentTimeMillis();
-        stringRedisTemplate.opsForValue().set(key, millis.toString(), 60, TimeUnit.SECONDS);
+        this.set(key, millis.toString(), 10);
+    }
+
+    /**
+     * 获取平台端的默认过期时间(秒)
+     */
+    public int getSessionTimeout() {
+        try {
+            String timeout = this.get(Constants.PLATFORM_SESSION_TIMEOUT_KEY);
+            if (timeout != null) {
+                return Integer.parseInt(timeout);
+            }
+        } catch (Exception e) {
+            //ignore
+        }
+        return Constants.PLATFORM_SESSION_EXPIRE_TIME;
     }
 
 }