获取用户信息添加缓存

This commit is contained in:
fuqingji
2022-06-30 14:52:09 +08:00
parent 56d6a333da
commit ea84d333f4
3 changed files with 79 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.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<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 {
/**
* 获取用户信息
*
* @param token
* @return
*/
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.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<String, Object> 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<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)) {
return user;
}
List<BaseRole> roles = (List<BaseRole>) 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<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() {
super();
}