Przeglądaj źródła

add Session UserToken.

deason 7 lat temu
rodzic
commit
3bd3364324

+ 10 - 1
src/main/java/cn/com/qmth/examcloud/app/config/AccessInterceptor.java

@@ -8,6 +8,7 @@
 package cn.com.qmth.examcloud.app.config;
 
 import cn.com.qmth.examcloud.app.model.DeviceRecord;
+import cn.com.qmth.examcloud.app.model.UserToken;
 import cn.com.qmth.examcloud.app.service.DeviceRecordService;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -17,6 +18,7 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 import java.util.Date;
 import java.util.Map;
 
@@ -29,8 +31,15 @@ public class AccessInterceptor extends HandlerInterceptorAdapter {
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        //异步保存设备访问记录
         DeviceRecord record = this.parseParams(request);
+        if (StringUtils.isNotEmpty(record.getLoginKey())) {
+            /*HttpSession session = request.getSession();
+            UserToken curUser = (UserToken) session.getAttribute(record.getLoginKey());
+            if (curUser == null) {
+
+            }*/
+        }
+        //异步保存设备访问记录
         deviceRecordService.addDeviceRecord(record);
         return true;
     }

+ 25 - 2
src/main/java/cn/com/qmth/examcloud/app/controller/v1/UserAuthRestController.java

@@ -7,13 +7,22 @@
 
 package cn.com.qmth.examcloud.app.controller.v1;
 
+import cn.com.qmth.examcloud.app.model.Constants;
 import cn.com.qmth.examcloud.app.model.Result;
+import cn.com.qmth.examcloud.app.model.UserToken;
 import cn.com.qmth.examcloud.app.service.UserAuthService;
+import cn.com.qmth.examcloud.app.utils.JsonMapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.util.Date;
+
+import static cn.com.qmth.examcloud.app.model.Constants.COMMON_ACCOUNT_TYPE;
+
 /**
  * 认证中心相关接口
  *
@@ -28,8 +37,22 @@ public class UserAuthRestController {
 
     @ApiOperation(value = "登录接口")
     @RequestMapping(value = "/user/login", method = {RequestMethod.GET, RequestMethod.POST})
-    public Result login(@RequestParam String account, @RequestParam String password, @RequestParam Long rootOrgId) throws Exception {
-        return userAuthService.login(account, password, rootOrgId);
+    public Result login(@RequestParam String account, @RequestParam String password, @RequestParam(required = false) String accountType,
+                        @RequestParam(required = false) Long rootOrgId, @RequestParam(required = false) String domain, HttpServletRequest request) throws Exception {
+        Result<String> result = userAuthService.login(account, password, accountType, rootOrgId, domain);
+        if (result.isSuccess()) {
+            UserToken curUser = new JsonMapper().fromJson(result.getData(), UserToken.class);
+            curUser.setAccount(account);
+            curUser.setPassword(password);
+            curUser.setAccountType(accountType != null ? accountType : COMMON_ACCOUNT_TYPE);
+            curUser.setDomain(domain);
+            curUser.setCreateTime(new Date());
+            //存放到Session中
+            HttpSession session = request.getSession();
+            session.setMaxInactiveInterval(Constants.EXPIRE_TIME);
+            session.setAttribute(curUser.getKey(), curUser);
+        }
+        return result;
     }
 
     @ApiOperation(value = "登出接口")

+ 6 - 1
src/main/java/cn/com/qmth/examcloud/app/model/Constants.java

@@ -9,6 +9,9 @@ package cn.com.qmth.examcloud.app.model;
 
 public interface Constants {
 
+    /* Session的过期时长,单位为秒 */
+    int EXPIRE_TIME = 2 * 60 * 60;
+
     String CHARSET_JSON_UTF8 = "application/json; charset=utf-8";
 
     String PARAM_KEY = "key";
@@ -19,7 +22,9 @@ public interface Constants {
 
     String TYPE_PDF = "pdf";
 
-    String DEFAULT_ACCOUNT_TYPE = "COMMON_LOGIN_NAME";
+    String COMMON_ACCOUNT_TYPE = "COMMON_LOGIN_NAME";
+
+    String STUDENT_ACCOUNT_TYPE = "STUDENT_CODE";
 
     String PASSWORD = "password";
 

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

@@ -0,0 +1,99 @@
+package cn.com.qmth.examcloud.app.model;
+
+import java.io.Serializable;
+import java.util.Date;
+
+public class UserToken implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private Long userId;
+    private Long rootOrgId;
+    private Long orgId;
+    private String domain;
+    private String account;
+    private String password;
+    private String accountType;
+    private String key;
+    private String token;
+    private Date createTime;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getRootOrgId() {
+        return rootOrgId;
+    }
+
+    public void setRootOrgId(Long rootOrgId) {
+        this.rootOrgId = rootOrgId;
+    }
+
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+
+    public String getDomain() {
+        return domain;
+    }
+
+    public void setDomain(String domain) {
+        this.domain = domain;
+    }
+
+    public String getAccount() {
+        return account;
+    }
+
+    public void setAccount(String account) {
+        this.account = account;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String getAccountType() {
+        return accountType;
+    }
+
+    public void setAccountType(String accountType) {
+        this.accountType = accountType;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public void setKey(String key) {
+        this.key = key;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+}

+ 7 - 5
src/main/java/cn/com/qmth/examcloud/app/service/UserAuthService.java

@@ -18,6 +18,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -33,15 +34,15 @@ public class UserAuthService {
     @Autowired
     private PropertyService propertyService;
 
-    public Result login(String account, String password, Long rootOrgId) throws Exception {
+    public Result<String> login(String account, String password, String accountType, Long rootOrgId, String domain) throws Exception {
         //封装请求参数
         final String requestUrl = String.format("%s/api/ecs_core/auth/login", propertyService.getUserAuthUrl());
         Map<String, String> params = new HashMap<>();
         params.put("accountValue", account);
         params.put("password", password);
-        params.put("rootOrgId", String.valueOf(rootOrgId));
-        params.put("accountType", DEFAULT_ACCOUNT_TYPE);
-        params.put("domain", "");
+        params.put("accountType", accountType != null ? accountType : COMMON_ACCOUNT_TYPE);
+        params.put("rootOrgId", rootOrgId != null ? rootOrgId.toString() : "");
+        params.put("domain", domain);
         String json = new JsonMapper().toJson(params);
         RequestBody formBody = FormBody.create(MediaType.parse(Constants.CHARSET_JSON_UTF8), json);
         Request request = new Request.Builder()
@@ -85,10 +86,11 @@ public class UserAuthService {
     }
 
     public Result updatePassword(String key, String token, Long userId, String password) throws Exception {
+        Assert.notNull(userId, "UserId must be not null.");
         //封装请求参数
         final String requestUrl = String.format("%s/api/ecs_core/user/password", propertyService.getUserAuthUrl());
         RequestBody formBody = new FormBody.Builder()
-                .add("userId", String.valueOf(userId))
+                .add("userId", userId.toString())
                 .add("password", password)
                 .build();
         return HttpUtils.doPut(requestUrl, formBody, key, token);