Browse Source

bug修复

wangliang 4 năm trước cách đây
mục cha
commit
1af9730001

+ 2 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/ClientController.java

@@ -12,6 +12,7 @@ import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.result.LoginResult;
 import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.AppSourceEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.service.CacheService;
@@ -88,7 +89,7 @@ public class ClientController {
                 throw ExceptionResultEnum.ERROR.exception("客户端只允许" + RoleTypeEnum.PRINTER.getDesc() + "登录");
             }
         }
-        return ResultUtil.ok(teachcloudCommonService.login(login.getPassword(), sysUser));
+        return ResultUtil.ok(teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM));
     }
 
     /**

+ 3 - 5
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -17,10 +17,7 @@ import com.qmth.teachcloud.common.bean.result.LoginResult;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
-import com.qmth.teachcloud.common.enums.DownloadFileEnum;
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.enums.RoleTypeEnum;
-import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.Result;
@@ -163,7 +160,7 @@ public class SysController {
                 }
             }
         }
-        return ResultUtil.ok(teachcloudCommonService.login(login.getPassword(), sysUser));
+        return ResultUtil.ok(teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM));
     }
 
     /**
@@ -319,6 +316,7 @@ public class SysController {
 
     /**
      * 学校查询
+     *
      * @return
      */
     @ApiOperation(value = "查询")

+ 16 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/LoginResult.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.entity.SysOrg;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.AppSourceEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.ApiModelProperty;
@@ -50,11 +51,14 @@ public class LoginResult implements Serializable {
     @ApiModelProperty(name = "服务器时间戳")
     private long time;
 
+    @ApiModelProperty(value = "应用来源")
+    AppSourceEnum appSource;
+
     public LoginResult() {
 
     }
 
-    public LoginResult(SysUser sysUser, String sessionId, String accessToken, Set<RoleTypeEnum> roleList) {
+    public LoginResult(SysUser sysUser, String sessionId, String accessToken, Set<RoleTypeEnum> roleList, AppSourceEnum appSource) {
         this.id = sysUser.getId();
         ServletUtil.setRequestId(Arrays.asList(id));
         this.loginName = sysUser.getLoginName();
@@ -62,15 +66,25 @@ public class LoginResult implements Serializable {
         this.sessionId = sessionId;
         this.accessToken = accessToken;
         this.roleList = roleList;
+        this.appSource = appSource;
     }
 
-    public LoginResult(SysUser sysUser, String sessionId, String accessToken, SchoolNativeBean schoolInfo, OrgNativeBean orgInfo) {
+    public LoginResult(SysUser sysUser, String sessionId, String accessToken, SchoolNativeBean schoolInfo, OrgNativeBean orgInfo, AppSourceEnum appSource) {
         this.loginName = sysUser.getLoginName();
         this.realName = sysUser.getRealName();
         this.sessionId = sessionId;
         this.accessToken = accessToken;
         this.schoolInfo = schoolInfo;
         this.orgInfo = orgInfo;
+        this.appSource = appSource;
+    }
+
+    public AppSourceEnum getAppSource() {
+        return appSource;
+    }
+
+    public void setAppSource(AppSourceEnum appSource) {
+        this.appSource = appSource;
     }
 
     public Set<RoleTypeEnum> getRoleList() {

+ 15 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/TBSession.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.enums.AppSourceEnum;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -72,6 +73,10 @@ public class TBSession implements Serializable {
     @TableField(value = "expire_time")
     private Long expireTime;
 
+    @ApiModelProperty(value = "应用来源")
+    @TableField(value = "app_source")
+    private AppSourceEnum appSource;
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }
@@ -80,7 +85,7 @@ public class TBSession implements Serializable {
 
     }
 
-    public TBSession(String id, String identity, String type, String source, String platform, String deviceId, String address, String accessToken, Long expireTime) {
+    public TBSession(String id, String identity, String type, String source, String platform, String deviceId, String address, String accessToken, Long expireTime, AppSourceEnum appSource) {
         this.id = id;
         this.identity = identity;
         this.type = type;
@@ -92,6 +97,7 @@ public class TBSession implements Serializable {
         this.expireTime = expireTime;
         this.lastAccessTime = System.currentTimeMillis();
         this.lastAccessIp = address;
+        this.appSource = appSource;
     }
 
     public void setLastInfo() {
@@ -99,6 +105,14 @@ public class TBSession implements Serializable {
         this.lastAccessIp = ServletUtil.getRequest().getLocalAddr();
     }
 
+    public AppSourceEnum getAppSource() {
+        return appSource;
+    }
+
+    public void setAppSource(AppSourceEnum appSource) {
+        this.appSource = appSource;
+    }
+
     public String getId() {
         return id;
     }

+ 42 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/AppSourceEnum.java

@@ -0,0 +1,42 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: app应用来源
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/6/29
+ */
+public enum AppSourceEnum {
+
+    SYSTEM("自身应用系统"),
+
+    WHU_THIRD("武汉大学");
+
+    private String title;
+
+    private AppSourceEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (AppSourceEnum e : AppSourceEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 3 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java

@@ -8,6 +8,7 @@ import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.SysRolePrivilege;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUserRole;
+import com.qmth.teachcloud.common.enums.AppSourceEnum;
 import com.qmth.teachcloud.common.enums.PrivilegePropertyEnum;
 
 import javax.servlet.http.HttpServletResponse;
@@ -187,7 +188,8 @@ public interface TeachcloudCommonService {
      *
      * @param password
      * @param sysUser
+     * @param appSource
      * @return
      */
-    public LoginResult login(String password, SysUser sysUser) throws NoSuchAlgorithmException;
+    public LoginResult login(String password, SysUser sysUser, AppSourceEnum appSource) throws NoSuchAlgorithmException;
 }

+ 5 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -608,11 +608,12 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
      *
      * @param password
      * @param sysUser
+     * @param appSource
      * @return
      * @throws NoSuchAlgorithmException
      */
     @Override
-    public LoginResult login(String password, SysUser sysUser) throws NoSuchAlgorithmException {
+    public LoginResult login(String password, SysUser sysUser, AppSourceEnum appSource) throws NoSuchAlgorithmException {
         //密码不正确
         if (!Objects.equals(password, sysUser.getPassword())) {
             throw ExceptionResultEnum.PASSWORD_ERROR.exception();
@@ -640,12 +641,12 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         ExpireTimeBean expireTime = AuthUtil.getExpireTime(platform);
         TBSession tbSession = new TBSession(sessionId, String.valueOf(sysUser.getId()), roleType.toString(),
                 platform.name(), platform.name(), deviceId, ServletUtil.getRequest().getLocalAddr(), token,
-                expireTime.getDate().getTime());
+                expireTime.getDate().getTime(), appSource);
         tbSessionService.saveOrUpdate(tbSession);
         redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
 
-//        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, roleType);
-        LoginResult loginResult = new LoginResult(sysUser, sessionId, token, roleType);
+//        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, roleType, appSource);
+        LoginResult loginResult = new LoginResult(sysUser, sessionId, token, roleType, appSource);
         loginResult.setSchoolInfo(Objects.nonNull(authBean.getSchool()) ? loginResult.new SchoolNativeBean(authBean.getSchool()) : null);
         loginResult.setOrgInfo(Objects.nonNull(authBean.getOrg()) ? loginResult.new OrgNativeBean(authBean.getOrg()) : null);
         loginResult.setTime(System.currentTimeMillis());

+ 7 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/ReportCommonService.java

@@ -3,6 +3,8 @@ package com.qmth.teachcloud.report.business.service;
 import com.qmth.teachcloud.report.business.bean.result.*;
 import com.qmth.teachcloud.report.business.entity.TAExamCourse;
 
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.util.List;
 
 /**
@@ -95,4 +97,9 @@ public interface ReportCommonService {
      * @return
      */
     SurveyTeacherExamCourseResult findAvgScore(Long schoolId, String courseCode, Long examId);
+
+    /**
+     * 武汉大学退出
+     */
+    public void whuLogout() throws IOException;
 }

+ 25 - 0
teachcloud-report-business/src/main/java/com/qmth/teachcloud/report/business/service/impl/ReportCommonServiceImpl.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.google.gson.Gson;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.util.JacksonUtil;
+import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.report.business.bean.result.*;
 import com.qmth.teachcloud.report.business.entity.TAExamCourse;
 import com.qmth.teachcloud.report.business.entity.TBDimension;
@@ -18,7 +20,13 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
+import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -509,4 +517,21 @@ public class ReportCommonServiceImpl implements ReportCommonService {
         BigDecimal bigDecimal = new BigDecimal(1);
         return new SurveyTeacherExamCourseResult(taExamCourse.getAvgScore(), bigDecimal.subtract(taExamCourse.getPassRate()).multiply(new BigDecimal("100")), taExamCourse.getCurrentAvgScore(), bigDecimal.subtract(taExamCourse.getCurrentPassRate()).multiply(new BigDecimal("100")));
     }
+
+    /**
+     * 武汉大学退出
+     */
+    @Override
+    public void whuLogout() throws IOException {
+        HttpServletRequest request = ServletUtil.getRequest();
+        HttpServletResponse response = ServletUtil.getResponse();
+        HttpSession session = request.getSession();
+        session.invalidate();
+        log.info("logout is come in,session:{}", JacksonUtil.parseJson(session));
+        String casLogoutURL = "http://cas.whu.edu.cn/authserver/logout";
+        // service后面带的参数为应用的访问地址,需要使用URLEncoder进行编码
+        String redirectURL = casLogoutURL + "?service=" + URLEncoder.encode("http://cas.whu.edu.cn/authserver/login", SystemConstant.CHARSET_NAME);
+        response.setHeader("Access-Control-Allow-Origin", "*");
+        response.sendRedirect(redirectURL);
+    }
 }

+ 14 - 11
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysController.java

@@ -16,15 +16,10 @@ import com.qmth.teachcloud.common.bean.result.LoginResult;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
-import com.qmth.teachcloud.common.enums.DownloadFileEnum;
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.enums.RoleTypeEnum;
-import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.service.*;
-import com.qmth.teachcloud.common.util.RedisUtil;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import com.qmth.teachcloud.common.util.ServletUtil;
+import com.qmth.teachcloud.common.util.*;
+import com.qmth.teachcloud.report.business.service.ReportCommonService;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -36,7 +31,10 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpSession;
 import javax.validation.Valid;
+import java.io.IOException;
+import java.net.URLEncoder;
 import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -86,6 +84,9 @@ public class SysController {
     @Resource
     SysConfigService sysConfigService;
 
+    @Resource
+    ReportCommonService reportCommonService;
+
     /**
      * 登录
      *
@@ -159,7 +160,7 @@ public class SysController {
                 }
             }
         }
-        return ResultUtil.ok(teachcloudCommonService.login(login.getPassword(), sysUser));
+        return ResultUtil.ok(teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM));
     }
 
     /**
@@ -170,7 +171,7 @@ public class SysController {
     @ApiOperation(value = "登出")
     @RequestMapping(value = "/logout", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
-    public Result logout() {
+    public void logout() throws IOException {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         TBSession tbSession = (TBSession) ServletUtil.getRequestSession();
         AuthBean authBean = cacheService.userAuthCache(sysUser.getId());
@@ -181,7 +182,9 @@ public class SysController {
         redisUtil.deleteUserSession(tbSession.getId());
         cacheService.removeUserCache(sysUser.getId());
         cacheService.removeUserAuthCache(sysUser.getId());
-        return ResultUtil.ok(new EditResult(sysUser.getId()));
+        if (Objects.nonNull(tbSession.getAppSource()) && tbSession.getAppSource() == AppSourceEnum.WHU_THIRD) {//武汉大学
+            reportCommonService.whuLogout();
+        }
     }
 
     /**

+ 3 - 2
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/WudaOpenApiController.java

@@ -11,6 +11,7 @@ import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicSchool;
 import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.enums.AppSourceEnum;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.CacheService;
 import com.qmth.teachcloud.common.service.SysUserService;
@@ -78,9 +79,9 @@ public class WudaOpenApiController {
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
     @Aac(auth = BOOL.FALSE)
     public void authenticationLogout(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        log.info("logout is come in:{}");
         HttpSession session = request.getSession();
         session.invalidate();
+        log.info("logout is come in,session:{}", JacksonUtil.parseJson(session));
         String casLogoutURL = "http://cas.whu.edu.cn/authserver/logout";
         // service后面带的参数为应用的访问地址,需要使用URLEncoder进行编码
         String redirectURL = casLogoutURL + "?service=" + URLEncoder.encode("http://cas.whu.edu.cn/authserver/login", SystemConstant.CHARSET_NAME);
@@ -148,7 +149,7 @@ public class WudaOpenApiController {
         if (Objects.isNull(userAuthCode) || !Objects.equals(values[1], SignatureEntityTest.encrypt(userAuthCode))) {
             throw ExceptionResultEnum.ERROR.exception("临时授权码已过期");
         }
-        LoginResult loginResult = teachcloudCommonService.login(sysUser.getPassword(), sysUser);
+        LoginResult loginResult = teachcloudCommonService.login(sysUser.getPassword(), sysUser, AppSourceEnum.WHU_THIRD);
         WhuUserAuthCacheUtil.deleteAuthCode(values[0]);
         return ResultUtil.ok(loginResult);
     }