From 56d6a333da236a9a66132a93454bb4aa1f80641c Mon Sep 17 00:00:00 2001 From: fuqingji <51312040@qq.com> Date: Thu, 30 Jun 2022 14:51:27 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9local=E7=9A=84=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-local.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 011a07d..1b1852b 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -91,6 +91,12 @@ spring: master: eshop-redis nodes: 10.125.164.124:32718, 10.125.164.118:32716, 10.125.164.121:32716 password: Unicom#135 + database: + idempotent: 0 + sharding: 1 + cache: 2 + backup: 3 + # 天宫Eureka配置 eureka: From ea84d333f4f346de36d72d0e6ebd8684f9e9fee8 Mon Sep 17 00:00:00 2001 From: fuqingji <51312040@qq.com> Date: Thu, 30 Jun 2022 14:52:09 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=B7=BB=E5=8A=A0=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserInfoController.java | 16 +++-- .../userinfo/service/EbtpUserInfoService.java | 13 ++++ .../service/impl/EbtpUserInfoServiceImpl.java | 63 ++++++++++++++++--- 3 files changed, 79 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/controller/UserInfoController.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/controller/UserInfoController.java index 97ad668..35f4b6c 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/controller/UserInfoController.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/controller/UserInfoController.java @@ -7,10 +7,7 @@ import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; @Slf4j @RestController @@ -36,4 +33,15 @@ public class UserInfoController { return ResponseEntity.ok(ebtpUserInfoService.getUserInfo(token)); } + + /** + * 刷新redis缓存的信息 + * + * @return + */ + @PostMapping("refresh") + public ResponseEntity refreshToken() { + return ResponseEntity.ok(ebtpUserInfoService.refresh()); + } + } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/EbtpUserInfoService.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/EbtpUserInfoService.java index 03e0200..2c00c4e 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/EbtpUserInfoService.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/EbtpUserInfoService.java @@ -5,6 +5,19 @@ import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser; public interface EbtpUserInfoService { + /** + * 获取用户信息 + * + * @param token + * @return + */ public BaseCacheUser getUserInfo(String token); + /** + * 刷新redis缓存的信息 + * + * @return + */ + public boolean refresh(); + } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/impl/EbtpUserInfoServiceImpl.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/impl/EbtpUserInfoServiceImpl.java index 8432abc..ef36011 100644 --- a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/impl/EbtpUserInfoServiceImpl.java +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/impl/EbtpUserInfoServiceImpl.java @@ -10,11 +10,12 @@ import com.chinaunicom.mall.ebtp.extend.userinfo.entity.BaseRole; import com.chinaunicom.mall.ebtp.extend.userinfo.entity.BaseUser; import com.chinaunicom.mall.ebtp.extend.userinfo.service.EbtpUserInfoService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; -import java.util.Collections; -import java.util.Objects; -import java.util.Optional; +import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Service @@ -27,6 +28,14 @@ public class EbtpUserInfoServiceImpl implements EbtpUserInfoService { @Autowired private BaseRoleMapper baseRoleMapper; + @Autowired(required = false) + @Qualifier("cacheRedisTemplate") + private RedisTemplate redisTemplate; + + private static final String EXTEND_USER_KEY = "ebtpUserTableCache"; + private static final String USERS = "users"; + private static final String ROLES = "roles"; + @Override public BaseCacheUser getUserInfo(String token) { //查询山分库 @@ -36,18 +45,24 @@ public class EbtpUserInfoServiceImpl implements EbtpUserInfoService { return new BaseCacheUser(); } - //查询拓展库的user表进行角色拓展 - BaseUser baseUser = baseUserMapper.selectOne(Wrappers.lambdaQuery(BaseUser.class).eq(BaseUser::getAccount, user.getUserId()).eq(BaseUser::getTenant, "ebtp_mall")); + //获取redis缓存 + Map userTable = getUserTable(); + //获取用户信息 + List users = (List) userTable.get(USERS); + BaseUser baseUser = users.stream().filter(u -> u.getAccount().equals(user.getLoginName())).findFirst().orElse(null); if (Objects.isNull(baseUser)) { return user; } + List roles = (List) userTable.get(ROLES); user.setProvince(baseUser.getProvince()) - //追加角色 - .getAuthorityList().addAll( - Optional.of(baseRoleMapper.selectList(Wrappers.lambdaQuery(BaseRole.class).in(BaseRole::getRole, baseUser.getRole())) - .stream().map(br -> + //覆盖角色 + .setAuthorityList( + Optional.of(roles + .stream() + .filter(r -> baseUser.getRole().contains(r.getRole())) + .map(br -> new AuthorityEntity() .setRoleId(br.getRoleId()) .setRoleCode(br.getRole()) @@ -59,6 +74,36 @@ public class EbtpUserInfoServiceImpl implements EbtpUserInfoService { return user; } + + private Map getUserTable() { + Object o = redisTemplate.opsForValue().get(EXTEND_USER_KEY); + + if (Objects.isNull(o)) { + o = cacheUserTable(); + } + return (Map) o ; + } + + private Map cacheUserTable() { + Map map = new HashMap<>(); + map.put(USERS, baseUserMapper.selectList(Wrappers.lambdaQuery(BaseUser.class).eq(BaseUser::getTenant, "ebtp_mall"))); + map.put(ROLES, baseRoleMapper.selectList(Wrappers.emptyWrapper())); + redisTemplate.opsForValue().set(EXTEND_USER_KEY, map, 8, TimeUnit.HOURS); + return map; + } + + + /** + * 删除token缓存 + * + * @return + */ + @Override + public boolean refresh() { + cacheUserTable(); + return true; + } + public EbtpUserInfoServiceImpl() { super(); }