From 9d25cb0ec78260a283b06fd96bc7b156f32cf9df Mon Sep 17 00:00:00 2001 From: Surpriseplus <845948745@qq.com> Date: 星期五, 30 九月 2022 14:28:52 +0800 Subject: [PATCH] 1 --- src/main/java/com/lf/server/service/data/TokenService.java | 112 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 99 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/lf/server/service/data/TokenService.java b/src/main/java/com/lf/server/service/data/TokenService.java index 2800557..baa6683 100644 --- a/src/main/java/com/lf/server/service/data/TokenService.java +++ b/src/main/java/com/lf/server/service/data/TokenService.java @@ -1,5 +1,7 @@ package com.lf.server.service.data; +import com.lf.server.entity.all.StaticData; +import com.lf.server.entity.data.LoginEntity; import com.lf.server.entity.data.TokenEntity; import com.lf.server.entity.data.UsersEntity; import com.lf.server.entity.sys.RedisCacheKey; @@ -29,6 +31,12 @@ @Autowired TokenMapper tokenMapper; + @Autowired + UsersService usersService; + + @Autowired + LoginService loginService; + @Override public Integer selectCount(String token) { return tokenMapper.selectCount(token); @@ -37,6 +45,21 @@ @Override public List<TokenEntity> selectByPage(String token, Integer limit, Integer offset) { return tokenMapper.selectByPage(token, limit, offset); + } + + @Override + public TokenEntity selectToken(int id) { + return tokenMapper.selectToken(id); + } + + @Override + public TokenEntity selectOneByToken(String token) { + return tokenMapper.selectOneByToken(token); + } + + @Override + public List<TokenEntity> selectTokenAll() { + return tokenMapper.selectTokenAll(); } @Override @@ -65,13 +88,8 @@ } @Override - public TokenEntity selectToken(int id) { - return tokenMapper.selectToken(id); - } - - @Override - public List<TokenEntity> selectTokenAll() { - return tokenMapper.selectTokenAll(); + public Integer updateTokenExpire(TokenEntity tokenEntity) { + return tokenMapper.updateTokenExpire(tokenEntity); } /** @@ -97,7 +115,7 @@ } /** - * 鏄惁鐧诲綍 + * 鏄�/鍚︾櫥褰� * * @param req * @param res @@ -110,11 +128,59 @@ } // redis - if (redisService.hasKey(RedisCacheKey.signTokenKey(token))) { + String tokenKey = RedisCacheKey.signTokenKey(token); + if (redisService.hasKey(tokenKey)) { + return true; + } + + // db + TokenEntity te = selectOneByToken(token); + if (te != null) { + redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES); return true; } return false; + } + + /** + * 鐧诲嚭 + * + * @param token + * @param req + * @return + */ + public Boolean logout(String token, HttpServletRequest req) { + TokenEntity te = getEntityByToken(token); + if (te == null) { + return false; + } + + // 娓呴櫎Cookie + WebHelper.deleteCookie(StaticData.TOKEN_COOKIE_KEY, req); + + // 娓呴櫎缂撳瓨 + String tokenKey = RedisCacheKey.signTokenKey(token); + redisService.delete(tokenKey); + + // 鑾峰彇褰撳墠鐢ㄦ埛 + UsersEntity ue = getCurrentUser(req); + if (te == null) { + return false; + } + + // db锛岃缃护鐗岃繃鏈� + te.setUpdateUser(ue.getId()); + Integer rows = updateTokenExpire(te); + if (rows == 0) { + return false; + } + + // 鍐欐棩蹇� + LoginEntity le = loginService.getNewLogin(ue.getId(), 3, req); + rows = loginService.insertLogin(le); + + return rows > 0; } /** @@ -128,13 +194,21 @@ return null; } - String key = RedisCacheKey.signTokenKey(token); - Object obj = redisService.get(key); + String tokenKey = RedisCacheKey.signTokenKey(token); + + // redis + Object obj = redisService.get(tokenKey); if (obj != null && obj instanceof TokenEntity) { return (TokenEntity) obj; } - return null; + // db + TokenEntity te = selectOneByToken(token); + if (te != null) { + redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES); + } + + return te; } /** @@ -158,6 +232,7 @@ /** * 鑾峰彇褰撳墠鐢ㄦ埛 + * * @param req * @return */ @@ -168,11 +243,22 @@ } String userKey = RedisCacheKey.signUserKey(token); + + // redis Object obj = redisService.get(userKey); if (obj != null && obj instanceof UsersEntity) { return (UsersEntity) obj; } - return null; + // db + UsersEntity ue = usersService.selectByToken(token); + if (ue != null) { + TokenEntity te = getEntityByToken(token); + if (te != null) { + redisService.put(userKey, ue, te.getDuration(), TimeUnit.MINUTES); + } + } + + return ue; } } -- Gitblit v1.9.3