From 5d6d6ce8574c52c8c267f6c655c450cc32a13366 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期日, 08 十月 2023 15:25:51 +0800 Subject: [PATCH] 修改令牌的管理接口 --- src/main/java/com/lf/server/service/sys/TokenService.java | 118 +++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 74 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/lf/server/service/sys/TokenService.java b/src/main/java/com/lf/server/service/sys/TokenService.java index ec92be1..41f1e68 100644 --- a/src/main/java/com/lf/server/service/sys/TokenService.java +++ b/src/main/java/com/lf/server/service/sys/TokenService.java @@ -9,9 +9,9 @@ import com.lf.server.helper.WebHelper; import com.lf.server.mapper.sys.TokenMapper; import com.lf.server.service.all.RedisService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Date; @@ -23,19 +23,18 @@ * @author sws * @date 2022-09-28 */ - @Service public class TokenService implements TokenMapper { - @Autowired + @Resource TokenMapper tokenMapper; - @Autowired + @Resource UserService usersService; - @Autowired + @Resource LoginService loginService; - @Autowired + @Resource RedisService redisService; @Override @@ -55,6 +54,16 @@ @Override public TokenEntity selectToken(int id) { return tokenMapper.selectToken(id); + } + + @Override + public List<TokenEntity> selectByIds(List<Integer> ids) { + return tokenMapper.selectByIds(ids); + } + + @Override + public TokenEntity selectOneById(Integer id) { + return tokenMapper.selectOneById(id); } @Override @@ -79,11 +88,27 @@ @Override public Integer deleteToken(int id) { + TokenEntity entity = tokenMapper.selectToken(id); + if (null == entity) { + return 0; + } + + clearCache(entity.getToken()); + return tokenMapper.deleteToken(id); } @Override public Integer deleteTokens(List<Integer> ids) { + List<TokenEntity> list = tokenMapper.selectByIds(ids); + if (null == list || list.isEmpty()) { + return 0; + } + + for (TokenEntity entity : list) { + clearCache(entity.getToken()); + } + return tokenMapper.deleteTokens(ids); } @@ -94,6 +119,8 @@ @Override public Integer updateTokenExpire(TokenEntity tokenEntity) { + clearCache(tokenEntity.getToken()); + return tokenMapper.updateTokenExpire(tokenEntity); } @@ -101,11 +128,18 @@ * 鑾峰彇鏂扮殑浠ょ墝瀹炰綋绫� */ public TokenEntity getNewToken(UserEntity ue, HttpServletRequest req) { + return getNewToken(0, SettingData.TOKEN_EXPIRE, ue, req); + } + + /** + * 鑾峰彇鏂扮殑浠ょ墝瀹炰綋绫� + */ + public TokenEntity getNewToken(Integer type, Integer min, UserEntity ue, HttpServletRequest req) { TokenEntity te = new TokenEntity(); te.setToken(WebHelper.getGuid()); - te.setDuration(SettingData.TOKEN_EXPIRE); - te.setExpire(WebHelper.getTimestamp(SettingData.TOKEN_EXPIRE)); - te.setType(0); + te.setDuration(min); + te.setExpire(WebHelper.getTimestamp(min)); + te.setType(type); te.setIp(WebHelper.getIpAddress(req)); te.setCreateUser(ue.getId()); te.setUname(ue.getUname()); @@ -122,20 +156,9 @@ return false; } - // redis - String tokenKey = RedisCacheKey.signTokenKey(token); - if (redisService.hasKey(tokenKey)) { - return true; - } + TokenEntity te = getEntityByToken(token); - // db - TokenEntity te = selectOneByToken(token); - if (te != null) { - redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES); - return true; - } - - return false; + return null != te; } /** @@ -143,7 +166,7 @@ */ public Boolean logout(String token, HttpServletRequest req, HttpServletResponse res) { TokenEntity te = getEntityByToken(token); - if (te == null) { + if (null == te) { return false; } @@ -156,16 +179,10 @@ return false; } - // 娓呴櫎缂撳瓨 - String tokenKey = RedisCacheKey.signTokenKey(token); - redisService.delete(tokenKey); - String userKey = RedisCacheKey.signUserKey(te.getToken()); - redisService.delete(userKey); - // db锛岃缃护鐗岃繃鏈� te.setUpdateUser(ue.getId()); Integer rows = updateTokenExpire(te); - if (rows == 0) { + if (0 == rows) { return false; } @@ -177,13 +194,19 @@ } /** + * 娓呴櫎缂撳瓨 + */ + public void clearCache(String token) { + String tokenKey = RedisCacheKey.signTokenKey(token); + redisService.delete(tokenKey); + String userKey = RedisCacheKey.signUserKey(token); + redisService.delete(userKey); + } + + /** * 鏍规嵁浠ょ墝鑾峰彇瀹炰綋 */ public TokenEntity getEntityByToken(String token) { - if (StringHelper.isNull(token)) { - return null; - } - String tokenKey = RedisCacheKey.signTokenKey(token); // redis @@ -194,8 +217,11 @@ // db TokenEntity te = selectOneByToken(token); - if (te != null) { - redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES); + if (null != te) { + long min = StringHelper.getMinuteDifference(te.getExpire()); + if (min > 0) { + redisService.put(tokenKey, te, min, TimeUnit.MINUTES); + } } return te; @@ -222,13 +248,20 @@ */ public UserEntity getCurrentUser(HttpServletRequest req) { String token = WebHelper.getToken(req); + + return getUserByToken(token); + } + + /** + * 鏍规嵁浠ょ墝鑾峰彇鐢ㄦ埛 + */ + public UserEntity getUserByToken(String token) { if (StringHelper.isNull(token)) { return null; } - String userKey = RedisCacheKey.signUserKey(token); - // redis + String userKey = RedisCacheKey.signUserKey(token); Object obj = redisService.get(userKey); if (obj instanceof UserEntity) { return (UserEntity) obj; @@ -236,11 +269,8 @@ // db UserEntity ue = usersService.selectByToken(token); - if (ue != null) { - TokenEntity te = getEntityByToken(token); - if (te != null) { - redisService.put(userKey, ue, te.getDuration(), TimeUnit.MINUTES); - } + if (null != ue) { + getEntityByToken(token); } return ue; @@ -276,6 +306,6 @@ String key = RedisCacheKey.signPwdError(ue.getUid()); Object objCount = redisService.get(key); - return objCount != null && (int) objCount >= SettingData.PWD_ERR_COUNT; + return null != objCount && (int) objCount >= SettingData.PWD_ERR_COUNT; } } -- Gitblit v1.9.3