Merge branch 'uat-userinfo' into 'uat_code'

Uat userinfo

See merge request eshop/biz_service_ebtp_extend!96
This commit is contained in:
付庆吉
2022-06-30 14:52:56 +08:00
4 changed files with 85 additions and 13 deletions

View File

@ -7,10 +7,7 @@ import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
@RestController @RestController
@ -36,4 +33,15 @@ public class UserInfoController {
return ResponseEntity.ok(ebtpUserInfoService.getUserInfo(token)); return ResponseEntity.ok(ebtpUserInfoService.getUserInfo(token));
} }
/**
* 刷新redis缓存的信息
*
* @return
*/
@PostMapping("refresh")
public ResponseEntity<Boolean> refreshToken() {
return ResponseEntity.ok(ebtpUserInfoService.refresh());
}
} }

View File

@ -5,6 +5,19 @@ import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser;
public interface EbtpUserInfoService { public interface EbtpUserInfoService {
/**
* 获取用户信息
*
* @param token
* @return
*/
public BaseCacheUser getUserInfo(String token); public BaseCacheUser getUserInfo(String token);
/**
* 刷新redis缓存的信息
*
* @return
*/
public boolean refresh();
} }

View File

@ -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.entity.BaseUser;
import com.chinaunicom.mall.ebtp.extend.userinfo.service.EbtpUserInfoService; import com.chinaunicom.mall.ebtp.extend.userinfo.service.EbtpUserInfoService;
import org.springframework.beans.factory.annotation.Autowired; 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 org.springframework.stereotype.Service;
import java.util.Collections; import java.util.*;
import java.util.Objects; import java.util.concurrent.TimeUnit;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -27,6 +28,14 @@ public class EbtpUserInfoServiceImpl implements EbtpUserInfoService {
@Autowired @Autowired
private BaseRoleMapper baseRoleMapper; private BaseRoleMapper baseRoleMapper;
@Autowired(required = false)
@Qualifier("cacheRedisTemplate")
private RedisTemplate<String, Object> redisTemplate;
private static final String EXTEND_USER_KEY = "ebtpUserTableCache";
private static final String USERS = "users";
private static final String ROLES = "roles";
@Override @Override
public BaseCacheUser getUserInfo(String token) { public BaseCacheUser getUserInfo(String token) {
//查询山分库 //查询山分库
@ -36,18 +45,24 @@ public class EbtpUserInfoServiceImpl implements EbtpUserInfoService {
return new BaseCacheUser(); return new BaseCacheUser();
} }
//查询拓展库的user表进行角色拓展 //获取redis缓存
BaseUser baseUser = baseUserMapper.selectOne(Wrappers.lambdaQuery(BaseUser.class).eq(BaseUser::getAccount, user.getUserId()).eq(BaseUser::getTenant, "ebtp_mall")); Map<String, Object> userTable = getUserTable();
//获取用户信息
List<BaseUser> users = (List<BaseUser>) userTable.get(USERS);
BaseUser baseUser = users.stream().filter(u -> u.getAccount().equals(user.getLoginName())).findFirst().orElse(null);
if (Objects.isNull(baseUser)) { if (Objects.isNull(baseUser)) {
return user; return user;
} }
List<BaseRole> roles = (List<BaseRole>) userTable.get(ROLES);
user.setProvince(baseUser.getProvince()) user.setProvince(baseUser.getProvince())
//追加角色 //覆盖角色
.getAuthorityList().addAll( .setAuthorityList(
Optional.of(baseRoleMapper.selectList(Wrappers.lambdaQuery(BaseRole.class).in(BaseRole::getRole, baseUser.getRole())) Optional.of(roles
.stream().map(br -> .stream()
.filter(r -> baseUser.getRole().contains(r.getRole()))
.map(br ->
new AuthorityEntity() new AuthorityEntity()
.setRoleId(br.getRoleId()) .setRoleId(br.getRoleId())
.setRoleCode(br.getRole()) .setRoleCode(br.getRole())
@ -59,6 +74,36 @@ public class EbtpUserInfoServiceImpl implements EbtpUserInfoService {
return user; return user;
} }
private Map<String, Object> getUserTable() {
Object o = redisTemplate.opsForValue().get(EXTEND_USER_KEY);
if (Objects.isNull(o)) {
o = cacheUserTable();
}
return (Map<String, Object>) o ;
}
private Map<String, Object> cacheUserTable() {
Map<String, Object> 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() { public EbtpUserInfoServiceImpl() {
super(); super();
} }

View File

@ -91,6 +91,12 @@ spring:
master: eshop-redis master: eshop-redis
nodes: 10.125.164.124:32718, 10.125.164.118:32716, 10.125.164.121:32716 nodes: 10.125.164.124:32718, 10.125.164.118:32716, 10.125.164.121:32716
password: Unicom#135 password: Unicom#135
database:
idempotent: 0
sharding: 1
cache: 2
backup: 3
# 天宫Eureka配置 # 天宫Eureka配置
eureka: eureka: