Files
spring-boot-base-demo/src/main/java/cn/xf/basedemo/service/impl/UserServiceImpl.java
xiongfeng 71ddb30d0d 1.引入sa-token权限框架
2.实现RBAC模型相关表结构(用户-权限-菜单-角色)
2025-08-21 22:27:27 +08:00

122 lines
4.2 KiB
Java

package cn.xf.basedemo.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import cn.xf.basedemo.common.model.EsBaseModel;
import cn.xf.basedemo.common.model.LoginInfo;
import cn.xf.basedemo.common.model.LoginUser;
import cn.xf.basedemo.common.model.RetObj;
import cn.xf.basedemo.common.utils.EsUtil;
import cn.xf.basedemo.common.utils.JwtTokenUtils;
import cn.xf.basedemo.common.utils.RSAUtils;
import cn.xf.basedemo.common.utils.StringUtil;
import cn.xf.basedemo.config.GlobalConfig;
import cn.xf.basedemo.mappers.UserMapper;
import cn.xf.basedemo.model.domain.User;
import cn.xf.basedemo.model.res.LoginInfoRes;
import cn.xf.basedemo.service.UserService;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
/**
* @program: xf-boot-base
* @ClassName UserServiceImpl
* @description:
* @author: xiongfeng
* @create: 2022-06-28 09:21
**/
@Slf4j
@Service
public class UserServiceImpl implements UserService {
@Autowired
private GlobalConfig globalConfig;
@Autowired
private ObjectMapper objectMapper;
@Autowired
private UserMapper userMapper;
@Autowired
private RedisTemplate redisTemplate;
@Override
public RetObj login(LoginInfoRes res) {
if (Objects.isNull(res) || StringUtils.isEmpty(res.getEncryptedData())) {
return null;
}
String loginJson = "";
try {
loginJson = RSAUtils.privateDecryption(res.getEncryptedData(), RSAUtils.getPrivateKey(globalConfig.getRsaPrivateKey()));
} catch (Exception e) {
log.error("解密失败------", e);
}
LoginInfo loginInfo = null;
try {
loginInfo = objectMapper.readValue(loginJson, LoginInfo.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
return RetObj.error("账号或密码错误");
}
if (!StringUtils.isEmpty(loginInfo.check())) {
return RetObj.error(loginInfo.check());
}
//校验登录账号密码
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("account", loginInfo.getAccount());
queryWrapper.eq("password", loginInfo.getPwd());
User user = userMapper.selectOne(queryWrapper);
if (Objects.isNull(user)) {
return RetObj.error("账号或密码错误");
}
LoginUser loginUser = new LoginUser();
loginUser.setId(user.getId());
loginUser.setAccount(user.getAccount());
loginUser.setName(user.getName());
loginUser.setPhone(user.getPhone());
String token = JwtTokenUtils.createToken(user.getId());
loginUser.setToken(token);
redisTemplate.opsForValue().set("token:" + token, JSONObject.toJSONString(loginUser), 3600, TimeUnit.SECONDS);
redisTemplate.opsForValue().set("user_login_token:" + user.getId(), token, 3600, TimeUnit.SECONDS);
//登录成功 写入sa-token中
StpUtil.login(user.getId());
return RetObj.success(loginUser);
}
@Override
public RetObj syncEs(Long userId) {
User user = userMapper.selectById(userId);
if (Objects.isNull(user)) {
return RetObj.error("用户不存在");
}
String index = StringUtil.camelToKebabCase(user.getClass().getSimpleName());
if (!EsUtil.existIndex(index)) {
EsUtil.createIndex(index);
}
EsUtil.addDocument(new EsBaseModel(index, String.valueOf(user.getId()), user, user.getClass()));
return RetObj.success();
}
@Override
public RetObj getEsId(Long userId) {
Object user = EsUtil.getDocumentById(new EsBaseModel("user", String.valueOf(userId), null, User.class));
if(Objects.nonNull(user)){
return RetObj.success(user);
}
return RetObj.error("es中不存在该用户");
}
}