|
@@ -10,12 +10,16 @@ import com.qmth.themis.business.entity.TBUser;
|
|
import com.qmth.themis.business.service.EhcacheService;
|
|
import com.qmth.themis.business.service.EhcacheService;
|
|
import com.qmth.themis.business.service.TBSessionService;
|
|
import com.qmth.themis.business.service.TBSessionService;
|
|
import com.qmth.themis.business.service.TBUserService;
|
|
import com.qmth.themis.business.service.TBUserService;
|
|
|
|
+import com.qmth.themis.business.util.EhcacheUtil;
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
import com.qmth.themis.business.util.RedisUtil;
|
|
import com.qmth.themis.business.util.SessionUtil;
|
|
import com.qmth.themis.business.util.SessionUtil;
|
|
import com.qmth.themis.common.contanst.Constants;
|
|
import com.qmth.themis.common.contanst.Constants;
|
|
import com.qmth.themis.common.enums.ExceptionResultEnum;
|
|
import com.qmth.themis.common.enums.ExceptionResultEnum;
|
|
import com.qmth.themis.common.enums.Platform;
|
|
import com.qmth.themis.common.enums.Platform;
|
|
|
|
+import com.qmth.themis.common.enums.Source;
|
|
import com.qmth.themis.common.exception.BusinessException;
|
|
import com.qmth.themis.common.exception.BusinessException;
|
|
|
|
+import com.qmth.themis.common.signature.SignatureInfo;
|
|
|
|
+import com.qmth.themis.common.signature.SignatureType;
|
|
import com.qmth.themis.common.util.AesUtil;
|
|
import com.qmth.themis.common.util.AesUtil;
|
|
import com.qmth.themis.common.util.Result;
|
|
import com.qmth.themis.common.util.Result;
|
|
import com.qmth.themis.common.util.ResultUtil;
|
|
import com.qmth.themis.common.util.ResultUtil;
|
|
@@ -105,8 +109,11 @@ public class TBUserController {
|
|
TBSession tbSession = tbSessionService.saveSessionInfo(sessionId, user.getId(), authDto.getRoleEnum().name(), platform.name(), platform.getSource(), deviceId, token, request.getLocalAddr(), expire);
|
|
TBSession tbSession = tbSessionService.saveSessionInfo(sessionId, user.getId(), authDto.getRoleEnum().name(), platform.name(), platform.getSource(), deviceId, token, request.getLocalAddr(), expire);
|
|
RedisUtil.setUserSession(sessionId, tbSession);
|
|
RedisUtil.setUserSession(sessionId, tbSession);
|
|
|
|
|
|
|
|
+ //测试
|
|
|
|
+ String test = SignatureInfo.build(SignatureType.TOKEN, sessionId, token);
|
|
Map<String, Object> map = new HashMap<>();
|
|
Map<String, Object> map = new HashMap<>();
|
|
- map.put(SystemConstant.ACCESS_TOKEN, token);
|
|
|
|
|
|
+// map.put(SystemConstant.ACCESS_TOKEN, token);
|
|
|
|
+ map.put(SystemConstant.ACCESS_TOKEN, test);
|
|
map.put(SystemConstant.ACCOUNT, user);
|
|
map.put(SystemConstant.ACCOUNT, user);
|
|
map.put(SystemConstant.SESSION_ID, sessionId);
|
|
map.put(SystemConstant.SESSION_ID, sessionId);
|
|
return ResultUtil.ok(map);
|
|
return ResultUtil.ok(map);
|
|
@@ -122,11 +129,26 @@ public class TBUserController {
|
|
@RequestMapping(value = "/logout", method = RequestMethod.GET)
|
|
@RequestMapping(value = "/logout", method = RequestMethod.GET)
|
|
@ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
|
|
@ApiResponses({@ApiResponse(code = 200, message = "{\"success\":true}", response = Result.class)})
|
|
public Result logout(HttpServletRequest request) throws NoSuchAlgorithmException {
|
|
public Result logout(HttpServletRequest request) throws NoSuchAlgorithmException {
|
|
|
|
+ TBUser tbUser = (TBUser) ServletUtil.getRequestAccount(request);
|
|
TBSession tbSession = (TBSession) ServletUtil.getRequestSession(request);
|
|
TBSession tbSession = (TBSession) ServletUtil.getRequestSession(request);
|
|
|
|
+ AuthDto authDto = (AuthDto) EhcacheUtil.get(SystemConstant.AUTH_CACHE, tbUser.getId());
|
|
if (Objects.isNull(tbSession)) {
|
|
if (Objects.isNull(tbSession)) {
|
|
throw new BusinessException(ExceptionResultEnum.LOGIN_NO);
|
|
throw new BusinessException(ExceptionResultEnum.LOGIN_NO);
|
|
}
|
|
}
|
|
RedisUtil.deleteUserSession(tbSession.getId());
|
|
RedisUtil.deleteUserSession(tbSession.getId());
|
|
|
|
+ //循环检查该用户下其他平台是否存在session,不存在则删除用户缓存和鉴权缓存
|
|
|
|
+ boolean delete = true;
|
|
|
|
+ for (Source s : Source.values()) {
|
|
|
|
+ String sessionId = SessionUtil.digest(tbUser.getId(), authDto.getRoleEnum().name(), s.name());
|
|
|
|
+ if (Objects.nonNull(RedisUtil.getUserSession(sessionId))) {
|
|
|
|
+ delete = false;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (delete) {
|
|
|
|
+ RedisUtil.deleteUser(tbUser.getId());
|
|
|
|
+ ehcacheService.removeAccountCache(tbUser.getId());
|
|
|
|
+ }
|
|
return ResultUtil.ok(JSONObject.parseObject(SystemConstant.SUCCESS));
|
|
return ResultUtil.ok(JSONObject.parseObject(SystemConstant.SUCCESS));
|
|
}
|
|
}
|
|
}
|
|
}
|