|
@@ -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;
|
|
}
|
|
}
|