Browse Source

bug修复

wangliang 4 years ago
parent
commit
8db569ab14

+ 21 - 12
distributed-print/src/main/java/com/qmth/distributed/print/auth/DistributedPrintAuthenticationService.java

@@ -5,6 +5,7 @@ import com.qmth.boot.core.security.model.AccessEntity;
 import com.qmth.boot.core.security.service.AuthorizationService;
 import com.qmth.boot.core.security.service.AuthorizationService;
 import com.qmth.boot.tools.signature.SignatureType;
 import com.qmth.boot.tools.signature.SignatureType;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
+import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.TBSession;
 import com.qmth.teachcloud.common.entity.TBSession;
@@ -12,7 +13,6 @@ import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PrivilegePropertyEnum;
 import com.qmth.teachcloud.common.enums.PrivilegePropertyEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.service.CacheService;
 import com.qmth.teachcloud.common.service.CacheService;
-import com.qmth.teachcloud.common.service.TBSessionService;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.RedisUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -36,6 +36,9 @@ public class DistributedPrintAuthenticationService implements AuthorizationServi
     @Resource
     @Resource
     RedisUtil redisUtil;
     RedisUtil redisUtil;
 
 
+    @Resource
+    DictionaryConfig dictionaryConfig;
+
     @Override
     @Override
     public AccessEntity findByIdentity(String identity, SignatureType signatureType, String path) {
     public AccessEntity findByIdentity(String identity, SignatureType signatureType, String path) {
         return new DistributedPrintSession(identity, SignatureType.TOKEN);
         return new DistributedPrintSession(identity, SignatureType.TOKEN);
@@ -46,36 +49,42 @@ public class DistributedPrintAuthenticationService implements AuthorizationServi
         if (Objects.nonNull(accessEntity) && Objects.nonNull(accessEntity.getIdentity())) {
         if (Objects.nonNull(accessEntity) && Objects.nonNull(accessEntity.getIdentity())) {
             TBSession tbSession = (TBSession) redisUtil.getUserSession(accessEntity.getIdentity());
             TBSession tbSession = (TBSession) redisUtil.getUserSession(accessEntity.getIdentity());
             if (Objects.isNull(tbSession)) {
             if (Objects.isNull(tbSession)) {
-                log.warn("Authorization faile: session id not exists: " + accessEntity.getIdentity());
+                log.warn("Authorization faile: session id not exists: {}", accessEntity.getIdentity());
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
             }
             }
             if (tbSession.getExpireTime() <= System.currentTimeMillis()) {
             if (tbSession.getExpireTime() <= System.currentTimeMillis()) {
-                log.warn("Authorization faile: session has expired, expire time=" + tbSession.getExpireTime());
+                log.warn("Authorization faile: session has expired, expire time={}", tbSession.getExpireTime());
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
             }
             }
             Platform platform = ServletUtil.getRequestPlatform();
             Platform platform = ServletUtil.getRequestPlatform();
             String deviceId = ServletUtil.getRequestDeviceId();
             String deviceId = ServletUtil.getRequestDeviceId();
             if (!tbSession.getPlatform().equalsIgnoreCase(platform.name())) {
             if (!tbSession.getPlatform().equalsIgnoreCase(platform.name())) {
-                log.warn("Authorization faile: platform invalid, session platform is " + tbSession.getPlatform());
+                log.warn("Authorization faile: platform invalid, session platform is {}", tbSession.getPlatform());
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
             }
             }
             if (!tbSession.getDeviceId().equalsIgnoreCase(deviceId)) {
             if (!tbSession.getDeviceId().equalsIgnoreCase(deviceId)) {
-                log.warn("Authorization faile: deviceId invalid, session deviceId is " + tbSession.getDeviceId());
+                log.warn("Authorization faile: deviceId invalid, session deviceId is {} ", tbSession.getDeviceId());
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
             }
             }
-            List<String> privilegeUrl = cacheService.privilegeUrlCache(PrivilegePropertyEnum.NO_AUTH);
-            //无需鉴权的url
-            int noAuthCount = Objects.nonNull(privilegeUrl) ? (int) privilegeUrl.stream().filter(s -> s.equalsIgnoreCase(path)).count() : 0;
-            if (noAuthCount > 0) {
-                return true;
-            }
             Long userId = Long.parseLong(tbSession.getIdentity());
             Long userId = Long.parseLong(tbSession.getIdentity());
             SysUser sysUser = cacheService.userCache(userId);
             SysUser sysUser = cacheService.userCache(userId);
             HttpServletRequest request = ServletUtil.getRequest();
             HttpServletRequest request = ServletUtil.getRequest();
             HttpServletResponse response = ServletUtil.getResponse();
             HttpServletResponse response = ServletUtil.getResponse();
             request.setAttribute(SystemConstant.SESSION, tbSession);
             request.setAttribute(SystemConstant.SESSION, tbSession);
             request.setAttribute(SystemConstant.USER, sysUser);
             request.setAttribute(SystemConstant.USER, sysUser);
-            return authFootCommon(userId, SystemConstant.USER_OAUTH_CACHE, path, request, response);
+            boolean auth = authFootCommon(userId, SystemConstant.USER_OAUTH_CACHE, path, request, response);
+            if (auth) {
+                Long expireTime = redisUtil.getUserSessionExpire(accessEntity.getIdentity());
+                if (Objects.nonNull(expireTime) && expireTime.longValue() > -1L) {
+                    if (Objects.nonNull(tbSession.getLastAccessTime()) && (System.currentTimeMillis() - tbSession.getLastAccessTime()) / 1000 > dictionaryConfig.sysDomain().getSessionActive().getSeconds()) {
+                        log.warn("Authorization faile: session active, session active is {}", dictionaryConfig.sysDomain().getSessionActive().getSeconds());
+                        throw ExceptionResultEnum.NOT_LOGIN.exception();
+                    }
+                    tbSession.setLastInfo();
+                    redisUtil.setUserSession(accessEntity.getIdentity(), tbSession, expireTime);
+                }
+            }
+            return auth;
         }
         }
         return false;
         return false;
     }
     }

+ 1 - 0
distributed-print/src/main/resources/application-dev.properties

@@ -56,6 +56,7 @@ sys.config.htmlToPdfUrl=/usr/local/bin/wkhtmltopdf
 sys.config.autoCreatePdfResetMaxCount=5
 sys.config.autoCreatePdfResetMaxCount=5
 sys.config.threadPoolCoreSize=1
 sys.config.threadPoolCoreSize=1
 sys.config.customThreadPoolCoreSize=true
 sys.config.customThreadPoolCoreSize=true
+sys.config.sessionActive=4h
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 
 
 org.center.url=https://solar.qmth.com.cn
 org.center.url=https://solar.qmth.com.cn

+ 1 - 0
distributed-print/src/main/resources/application-release.properties

@@ -56,6 +56,7 @@ sys.config.htmlToPdfUrl=/usr/local/bin/wkhtmltopdf
 sys.config.autoCreatePdfResetMaxCount=5
 sys.config.autoCreatePdfResetMaxCount=5
 sys.config.threadPoolCoreSize=1
 sys.config.threadPoolCoreSize=1
 sys.config.customThreadPoolCoreSize=true
 sys.config.customThreadPoolCoreSize=true
+sys.config.sessionActive=4h
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 
 
 org.center.url=https://solar.qmth.com.cn
 org.center.url=https://solar.qmth.com.cn

+ 1 - 0
distributed-print/src/main/resources/application-test.properties

@@ -56,6 +56,7 @@ sys.config.htmlToPdfUrl=/usr/local/bin/wkhtmltopdf
 sys.config.autoCreatePdfResetMaxCount=5
 sys.config.autoCreatePdfResetMaxCount=5
 sys.config.threadPoolCoreSize=1
 sys.config.threadPoolCoreSize=1
 sys.config.customThreadPoolCoreSize=true
 sys.config.customThreadPoolCoreSize=true
+sys.config.sessionActive=4h
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 
 
 org.center.url=https://solar.qmth.com.cn
 org.center.url=https://solar.qmth.com.cn

+ 17 - 22
teachcloud-report/src/main/java/com/qmth/teachcloud/report/auth/TeachcloudReportAuthenticationService.java

@@ -49,47 +49,42 @@ public class TeachcloudReportAuthenticationService implements AuthorizationServi
         if (Objects.nonNull(accessEntity) && Objects.nonNull(accessEntity.getIdentity())) {
         if (Objects.nonNull(accessEntity) && Objects.nonNull(accessEntity.getIdentity())) {
             TBSession tbSession = (TBSession) redisUtil.getUserSession(accessEntity.getIdentity());
             TBSession tbSession = (TBSession) redisUtil.getUserSession(accessEntity.getIdentity());
             if (Objects.isNull(tbSession)) {
             if (Objects.isNull(tbSession)) {
-                log.warn("Authorization faile: session id not exists: " + accessEntity.getIdentity());
+                log.warn("Authorization faile: session id not exists: {}", accessEntity.getIdentity());
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
             }
             }
             if (tbSession.getExpireTime() <= System.currentTimeMillis()) {
             if (tbSession.getExpireTime() <= System.currentTimeMillis()) {
-                log.warn("Authorization faile: session has expired, expire time=" + tbSession.getExpireTime());
+                log.warn("Authorization faile: session has expired, expire time={}", tbSession.getExpireTime());
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
                 throw ExceptionResultEnum.NOT_LOGIN.exception();
             }
             }
             Platform platform = ServletUtil.getRequestPlatform();
             Platform platform = ServletUtil.getRequestPlatform();
             String deviceId = ServletUtil.getRequestDeviceId();
             String deviceId = ServletUtil.getRequestDeviceId();
             if (!tbSession.getPlatform().equalsIgnoreCase(platform.name())) {
             if (!tbSession.getPlatform().equalsIgnoreCase(platform.name())) {
-                log.warn("Authorization faile: platform invalid, session platform is " + tbSession.getPlatform());
+                log.warn("Authorization faile: platform invalid, session platform is {}", tbSession.getPlatform());
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
             }
             }
             if (!tbSession.getDeviceId().equalsIgnoreCase(deviceId)) {
             if (!tbSession.getDeviceId().equalsIgnoreCase(deviceId)) {
-                log.warn("Authorization faile: deviceId invalid, session deviceId is " + tbSession.getDeviceId());
+                log.warn("Authorization faile: deviceId invalid, session deviceId is {} ", tbSession.getDeviceId());
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
                 throw ExceptionResultEnum.AUTHORIZATION_ERROR.exception();
             }
             }
-
-//            Long expireTime = redisUtil.getUserSessionExpire(accessEntity.getIdentity());
-//            if (Objects.nonNull(expireTime) && expireTime.longValue() > -1L) {
-//                if (Objects.nonNull(tbSession.getLastAccessTime()) && (System.currentTimeMillis() - tbSession.getLastAccessTime()) / 1000 > dictionaryConfig.sysDomain().getSessionActive().getSeconds()) {
-//                    log.warn("Authorization faile: session active, session active is " + dictionaryConfig.sysDomain().getSessionActive().getSeconds());
-//                    throw ExceptionResultEnum.NOT_LOGIN.exception();
-//                }
-//                tbSession.setLastInfo();
-//                redisUtil.setUserSession(accessEntity.getIdentity(), tbSession, expireTime);
-//            }
-
-            List<String> privilegeUrl = cacheService.privilegeUrlCache(PrivilegePropertyEnum.NO_AUTH);
-            //无需鉴权的url
-            int noAuthCount = Objects.nonNull(privilegeUrl) ? (int) privilegeUrl.stream().filter(s -> s.equalsIgnoreCase(path)).count() : 0;
-            if (noAuthCount > 0) {
-                return true;
-            }
             Long userId = Long.parseLong(tbSession.getIdentity());
             Long userId = Long.parseLong(tbSession.getIdentity());
             SysUser sysUser = cacheService.userCache(userId);
             SysUser sysUser = cacheService.userCache(userId);
             HttpServletRequest request = ServletUtil.getRequest();
             HttpServletRequest request = ServletUtil.getRequest();
             HttpServletResponse response = ServletUtil.getResponse();
             HttpServletResponse response = ServletUtil.getResponse();
             request.setAttribute(SystemConstant.SESSION, tbSession);
             request.setAttribute(SystemConstant.SESSION, tbSession);
             request.setAttribute(SystemConstant.USER, sysUser);
             request.setAttribute(SystemConstant.USER, sysUser);
-            return authFootCommon(userId, SystemConstant.USER_OAUTH_CACHE, path, request, response);
+            boolean auth = authFootCommon(userId, SystemConstant.USER_OAUTH_CACHE, path, request, response);
+            if (auth) {
+                Long expireTime = redisUtil.getUserSessionExpire(accessEntity.getIdentity());
+                if (Objects.nonNull(expireTime) && expireTime.longValue() > -1L) {
+                    if (Objects.nonNull(tbSession.getLastAccessTime()) && (System.currentTimeMillis() - tbSession.getLastAccessTime()) / 1000 > dictionaryConfig.sysDomain().getSessionActive().getSeconds()) {
+                        log.warn("Authorization faile: session active, session active is {}", dictionaryConfig.sysDomain().getSessionActive().getSeconds());
+                        throw ExceptionResultEnum.NOT_LOGIN.exception();
+                    }
+                    tbSession.setLastInfo();
+                    redisUtil.setUserSession(accessEntity.getIdentity(), tbSession, expireTime);
+                }
+            }
+            return auth;
         }
         }
         return false;
         return false;
     }
     }

+ 1 - 0
teachcloud-report/src/main/resources/application-dev.properties

@@ -58,6 +58,7 @@ sys.config.adminLogoUrl=http://qmth-test.oss-cn-shenzhen.aliyuncs.com/frontend/w
 #sys.config.autoCreatePdfResetMaxCount=5
 #sys.config.autoCreatePdfResetMaxCount=5
 sys.config.threadPoolCoreSize=1
 sys.config.threadPoolCoreSize=1
 sys.config.customThreadPoolCoreSize=false
 sys.config.customThreadPoolCoreSize=false
+sys.config.sessionActive=1h
 sys.config.reportUrl=http://localhost:9099/#/student-report/
 sys.config.reportUrl=http://localhost:9099/#/student-report/
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 
 

+ 1 - 1
teachcloud-report/src/main/resources/application-release.properties

@@ -56,7 +56,7 @@ sys.config.adminLogoUrl=http://qmth-test.oss-cn-shenzhen.aliyuncs.com/frontend/w
 #sys.config.autoCreatePdfResetMaxCount=5
 #sys.config.autoCreatePdfResetMaxCount=5
 sys.config.threadPoolCoreSize=1
 sys.config.threadPoolCoreSize=1
 sys.config.customThreadPoolCoreSize=false
 sys.config.customThreadPoolCoreSize=false
-sys.config.sessionActive=2h
+sys.config.sessionActive=1h
 sys.config.reportUrl=https://whu.qmth.com.cn/#/student-report/
 sys.config.reportUrl=https://whu.qmth.com.cn/#/student-report/
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 
 

+ 1 - 1
teachcloud-report/src/main/resources/application-test.properties

@@ -56,7 +56,7 @@ sys.config.adminLogoUrl=http://qmth-test.oss-cn-shenzhen.aliyuncs.com/frontend/w
 #sys.config.autoCreatePdfResetMaxCount=5
 #sys.config.autoCreatePdfResetMaxCount=5
 sys.config.threadPoolCoreSize=1
 sys.config.threadPoolCoreSize=1
 sys.config.customThreadPoolCoreSize=false
 sys.config.customThreadPoolCoreSize=false
-sys.config.sessionActive=2h
+sys.config.sessionActive=1h
 sys.config.reportUrl=http://192.168.10.136:7005/#/student-report/
 sys.config.reportUrl=http://192.168.10.136:7005/#/student-report/
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/
 spring.resources.static-locations=file:${sys.config.serverUpload},classpath:/META-INF/resources/,classpath:/resources/