不共享问题

时间:2025-03-07 07:20:11
  • package ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import .slf4j.Slf4j;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • import ;
  • @Slf4j
  • @Service
  • public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService{
  • @Autowired
  • private StringRedisTemplate stringRedisTemplate;
  • @Override
  • public Result sendCode(String phone, HttpSession session) {
  • //检验手机号
  • if ((phone)) {
  • return ("手机号无效");
  • }
  • //生成验证码
  • String code = (6);
  • //存入Redis,key值定义带上业务功能,防止其他使用手机号的功能模块重复,设置过期时间
  • ().set(RedisConstants.LOGIN_CODE_KEY + phone, code,
  • RedisConstants.LOGIN_CODE_TTL, );
  • //发送验证码给用户
  • ("给用户发送验证码============={}", code);
  • //返回
  • return ("发送成功");
  • }
  • @Override
  • public Result login(LoginFormDTO loginFormDTO, HttpSession session) {
  • //校验手机号
  • if ((())) {
  • return ("手机号无效");
  • }
  • //校验验证码
  • String cacheCode = ().get(RedisConstants.LOGIN_CODE_KEY + ());
  • String code = ();
  • if (code == null || !(cacheCode)) {
  • return ("验证码错误");
  • }
  • //根据手机号查询用户
  • User user = query().eq("phone", ()).one();
  • if (user == null) {
  • //用户不存在则创建用户
  • user = createUser(());
  • }
  • //将用户放入redis
  • //随机生成token,作为登录令牌
  • String token = ().toString(true);
  • //将user对象转化为Hash存储
  • //存储到redis
  • UserDTO userDTO = (user, );
  • Map<String, Object> map = (userDTO, new HashMap<>(3),
  • ().ignoreNullValue()
  • //把所有字段的value都转成String,因为StringRedisTemplate的key-value只支持String类型
  • .setFieldValueEditor((fieldName, fieldValue) -> ()));
  • String userKey = RedisConstants.LOGIN_USER_KEY + token;
  • ().putAll(userKey, map);
  • //设置有效期,否则大量用户登录,长期占用内存,半个小时过期,需要重新登录
  • (userKey, RedisConstants.LOGIN_USER_TTL, );
  • //返回user的token
  • return (token);
  • }
  • private User createUser(String phone) {
  • User user = new User();
  • (phone);
  • (SystemConstants.USER_NICK_NAME_PREFIX + (6));
  • save(user);
  • return user;
  • }
  • }