分布式登陆

本文探讨如何在分布式环境中,由于跨项目限制无法使用session,转而利用redis存储和检索用户登录信息,包括登录、注销等关键流程的实现。
摘要由CSDN通过智能技术生成

因为是跨项目所以不能将信息存入session,只能将信息存入redis,后再取出

消费者

 Controller 层
 @Resource
private RedisTemplate<String,Object>redisTemplate;
   @PostMapping("login")
   public HashMap<String, Object> login(User user){
       return userService.login(user);
   }
       /**
     * 缓存显示
     */
    @GetMapping("xianshi")
   public User xianshi(){
       List<Object> range = redisTemplate.opsForList().range(ConstantConf.USER_LOGIN, 0, -1);
       User o = (User) range.get(0);
       return  o;
   }

    /**
     * 注销
     * @return
     */
   @GetMapping("logout")
    public void logout(){
       redisTemplate.delete(ConstantConf.USER_LOGIN);

   }
   service 层
     @PostMapping("login")
  public   HashMap<String, Object> login(@RequestBody User user);

生产者

   @Resource
    private RedisTemplate<String,Object> redisTemplate;
        @PostMapping("login")
    @ResponseBody
    public HashMap<String, Object> login(@RequestBody User user){
        HashMap<String,Object> result = new HashMap<>();


        User userInfo= userMapper.findIntoByloginnumber(user.getLoginnumber());
//判断账号是否存在
        if(userInfo==null) {
            result.put("code", 2);
            result.put("msg", "账号不存在");
            return result;
        }

        //判断前台输入的密码和数据库的是否一致
        String password = user.getPassword();
        String md516 = Md5Util.getMd516(password);
        if(!userInfo.getPassword().equals(md516)) {
            result.put("code", 3);
            result.put("msg", "密码错误");
            return result;
        }
//将用户信息保存到redis中
        //session.setAttribute(session.getId(), userInfo);
        Long aLong = redisTemplate.opsForList().leftPush(ConstantConf.USER_LOGIN, userInfo);
        result.put("code", 0);
        result.put("msg", "登陆成功");
        return result;
    }
    mapper层
        @Select("select * from t_user where loginnumber=#{value}")
    User findIntoByloginnumber(String loginnumber);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值