From 521efd154611052b912f726422deb70644ef4f8d Mon Sep 17 00:00:00 2001 From: fuqingji <51312040@qq.com> Date: Wed, 29 Jun 2022 16:43:52 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E7=94=A8=E6=88=B7=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserInfoController.java | 6 +- .../extend/userinfo/dao/BaseRoleMapper.java | 10 +++ .../extend/userinfo/dao/BaseUserMapper.java | 10 +++ .../ebtp/extend/userinfo/entity/BaseRole.java | 48 ++++++++++++++ .../ebtp/extend/userinfo/entity/BaseUser.java | 65 +++++++++++++++++++ .../userinfo/service/EbtpUserInfoService.java | 10 +++ .../service/impl/EbtpUserInfoServiceImpl.java | 65 +++++++++++++++++++ 7 files changed, 211 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/dao/BaseRoleMapper.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/dao/BaseUserMapper.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/entity/BaseRole.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/entity/BaseUser.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/EbtpUserInfoService.java create mode 100644 src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/impl/EbtpUserInfoServiceImpl.java 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 0489224..97ad668 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 @@ -1,7 +1,7 @@ package com.chinaunicom.mall.ebtp.extend.userinfo.controller; -import com.chinaunicom.mall.ebtp.cloud.userinfo.starter.service.UserInfoService; import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser; +import com.chinaunicom.mall.ebtp.extend.userinfo.service.EbtpUserInfoService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController; public class UserInfoController { @Autowired - private UserInfoService service; + private EbtpUserInfoService ebtpUserInfoService; /** * 获取用户信息 @@ -33,7 +33,7 @@ public class UserInfoController { log.error("access token is empty"); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); } - return ResponseEntity.ok(service.getUserInfo(token)); + return ResponseEntity.ok(ebtpUserInfoService.getUserInfo(token)); } } diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/dao/BaseRoleMapper.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/dao/BaseRoleMapper.java new file mode 100644 index 0000000..300188f --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/dao/BaseRoleMapper.java @@ -0,0 +1,10 @@ +package com.chinaunicom.mall.ebtp.extend.userinfo.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.chinaunicom.mall.ebtp.extend.userinfo.entity.BaseRole; + +public interface BaseRoleMapper extends BaseMapper { + + +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/dao/BaseUserMapper.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/dao/BaseUserMapper.java new file mode 100644 index 0000000..bb83810 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/dao/BaseUserMapper.java @@ -0,0 +1,10 @@ +package com.chinaunicom.mall.ebtp.extend.userinfo.dao; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.chinaunicom.mall.ebtp.extend.userinfo.entity.BaseUser; + +public interface BaseUserMapper extends BaseMapper { + + +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/entity/BaseRole.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/entity/BaseRole.java new file mode 100644 index 0000000..eee438c --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/entity/BaseRole.java @@ -0,0 +1,48 @@ +package com.chinaunicom.mall.ebtp.extend.userinfo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 功能模块bean + * + * @author zyx + * + */ +@Data +@Accessors(chain = true) +@ApiModel +@TableName(value = "maint_base_role", autoResultMap = true) +public class BaseRole implements Serializable { + + private static final Long serialVersionUID = 1L; + + /** + * 姓名 + */ + @ApiModelProperty(value = "角色") + private String role; + + /** + * 账号 + */ + @ApiModelProperty(value = "备注") + private String remarks; + + /** + * role_id + */ + @ApiModelProperty(value = "role_id") + private String roleId; + + /** + * 账号 + */ + @ApiModelProperty(value = "状态,0-默认") + private int status; +} diff --git a/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/entity/BaseUser.java b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/entity/BaseUser.java new file mode 100644 index 0000000..387cc3e --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/entity/BaseUser.java @@ -0,0 +1,65 @@ +package com.chinaunicom.mall.ebtp.extend.userinfo.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 功能模块bean + * + * @author zyx + * + */ +@Data +@Accessors(chain = true) +@ApiModel +@TableName(value = "maint_base_user", autoResultMap = true) +public class BaseUser implements Serializable { + + private static final Long serialVersionUID = 1L; + /** + * id + */ + @ApiModelProperty(value = "编号") + private String id; + + /** + * 姓名 + */ + @ApiModelProperty(value = "姓名") + private String name; + + /** + * 账号 + */ + @ApiModelProperty(value = "账号") + private String account; + + /** + * 密码 + */ + @ApiModelProperty(value = "密码") + private String password; + + /** + * 省份 + */ + @ApiModelProperty(value = "省份") + private String province; + + /** + * 角色 + */ + @ApiModelProperty(value = "角色") + private String role; + + /** + * 租户 + */ + @ApiModelProperty(value = "租户") + private String tenant; +} 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 new file mode 100644 index 0000000..03e0200 --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/EbtpUserInfoService.java @@ -0,0 +1,10 @@ +package com.chinaunicom.mall.ebtp.extend.userinfo.service; + +import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser; + +public interface EbtpUserInfoService { + + + public BaseCacheUser getUserInfo(String token); + +} 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 new file mode 100644 index 0000000..8432abc --- /dev/null +++ b/src/main/java/com/chinaunicom/mall/ebtp/extend/userinfo/service/impl/EbtpUserInfoServiceImpl.java @@ -0,0 +1,65 @@ +package com.chinaunicom.mall.ebtp.extend.userinfo.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.AuthorityEntity; +import com.chinaunicom.mall.ebtp.cloud.userinfo.starter.service.UserInfoService; +import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser; +import com.chinaunicom.mall.ebtp.extend.userinfo.dao.BaseRoleMapper; +import com.chinaunicom.mall.ebtp.extend.userinfo.dao.BaseUserMapper; +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.stereotype.Service; + +import java.util.Collections; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +@Service +public class EbtpUserInfoServiceImpl implements EbtpUserInfoService { + + @Autowired + private UserInfoService service; + @Autowired + private BaseUserMapper baseUserMapper; + @Autowired + private BaseRoleMapper baseRoleMapper; + + @Override + public BaseCacheUser getUserInfo(String token) { + //查询山分库 + BaseCacheUser user = service.getUserInfo(token); + + if (Objects.isNull(user)) { + return new BaseCacheUser(); + } + + //查询拓展库的user表进行角色拓展 + BaseUser baseUser = baseUserMapper.selectOne(Wrappers.lambdaQuery(BaseUser.class).eq(BaseUser::getAccount, user.getUserId()).eq(BaseUser::getTenant, "ebtp_mall")); + + if (Objects.isNull(baseUser)) { + return user; + } + + user.setProvince(baseUser.getProvince()) + //追加角色 + .getAuthorityList().addAll( + Optional.of(baseRoleMapper.selectList(Wrappers.lambdaQuery(BaseRole.class).in(BaseRole::getRole, baseUser.getRole())) + .stream().map(br -> + new AuthorityEntity() + .setRoleId(br.getRoleId()) + .setRoleCode(br.getRole()) + .setRoleName(br.getRemarks()) + .setRoleScope("EBTP") + .setAuthorities(Collections.emptyList())) + .collect(Collectors.toList())) + .orElseGet(Collections::emptyList)); + return user; + } + + public EbtpUserInfoServiceImpl() { + super(); + } +} From fcb9535208762830c4ed1e6fdf291b5444508b33 Mon Sep 17 00:00:00 2001 From: fuqingji <51312040@qq.com> Date: Thu, 30 Jun 2022 10:14:33 +0800 Subject: [PATCH 2/4] =?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 | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 45bc284..011a07d 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -36,8 +36,8 @@ spring: driver-class-name: com.mysql.cj.jdbc.Driver username: mall password: unicom - jdbc-url: jdbc:mysql://10.125.160.26:3306/ebtp_mall_extend?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true - url: jdbc:mysql://10.125.160.26:3306/ebtp_mall_extend?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true + jdbc-url: jdbc:mysql://10.125.160.30:3306/ebtp_mall_extend?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true + url: jdbc:mysql://10.125.160.30:3306/ebtp_mall_extend?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true filters: stat,wall,log4j maxActive: 20 initialSize: 1 @@ -172,6 +172,8 @@ mconfig: bss: app-id: 2ICalrrQ0F app-secret: 1mb6n6635cJkDb3pEQPUFXc2nRJ8RPaS + app-url-test: 10.124.150.230:8000 + app-url: 10.245.34.209:8000 document: clientHttpUrl: http://10.242.31.158:8100/auth/oauth/token?grant_type=client_credentials&client_id=bVS46ElU&client_secret=58ea04ba02475c8da2321cc99849d2a10f15b749 @@ -196,4 +198,15 @@ xxl: ip: '' port: 18181 logpath: /data/applogs/xxl-job/jobhandler - logretentiondays: 30 \ No newline at end of file + logretentiondays: 30 +client: + clientHttpUrl: http://10.242.31.158:8100/auth/oauth/token?grant_type=client_credentials&client_id=bVS46ElU&client_secret=58ea04ba02475c8da2321cc99849d2a10f15b749 +allow: + apis : + - ^GET\./?v1/userinfo/get$ +unifast: + sso: + public-key: 0428D625CEEB71CE823BD7D78DFEE7B122F2DA5C4D21E32253AD684D0FE21810394A799639C0CDFBFEB535A1DFD6A366A637E582CE0B1466A5FE7858841135DE6B + clientId: p6IPukcJ + redirectUrl: http://10.125.86.213:18000/redirect + getCode.url: http://10.125.86.213:18808/outer/v1.0/sso/decide 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 3/4] =?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 4/4] =?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(); }