zoukankan      html  css  js  c++  java
  • 同平台不允许同时登陆的方案(不同平台可同时登陆)

    项目需求:

    现在项目有PC端,WEB端,APP端

    同端不允许同时登陆,不同端可以同时登陆

    并没有涉及太多复杂的逻辑,这里只探讨结合Redis进行不同端的登陆控制.

    具体方案:

    1 - 将token存到redis中

    2 - token: 类型-用户id-随机数

    3 - 用户登录时根据类型和id删除原token,写入新token

    4 - 用户退出时根据类型和id删除原token

    上代码:

    1 - 登陆

    public String login(String phone, String password, String type) {
        User user = getUserByPhone(phone);
        if (user == null) {
            return "NOT_FOUND";
        }
        if (!checkPassword(user.getPassword(), password)) {
            return "PASSWORD_ERROR";
        }// 删除redis中原token
        deleteToken(user, type);
        // 生成新token,存redis,返回
        return setToken2Redis(user, type);
    }

    2 - 删除原token

    public void deleteToken(User user, String type) {
        String deleteRegex = type + "-" + user.getId() + "*";
        Set<String> keys = redisTemplate.keys(deleteRegex);
        redisTemplate.delete(keys);
    }

    3 - 生成新token

    public String setToken2Redis(User user, String type) {
        String token = createToken(user, type);
        // 登陆时其它信息缓存...
        return token;
    }

    尽可能的简单,只要满足现在的使用就可以.

    因为需求在变,越简单越容易重构.

    知止而后有定;定而后能静;静而后能安;安而后能虑;虑而后能得。
  • 相关阅读:
    夺命雷公狗TP3.2.3商城11-----后台头部和左侧导航分离
    夺命雷公狗TP3.2.3商城10-----中间层的创建,防止跨目录访问
    3.spring cloud eureka 高可用
    2.spring cloud eureka client配置
    1.spring cloud eureka server配置
    css去掉input记住密码的黄色
    34-THREE.JS 游泳圈
    32-THREE.JS 球体
    31-THREE.JS 正方体
    30-THREE.JS 圆环
  • 原文地址:https://www.cnblogs.com/SamNicole1809/p/13563477.html
Copyright © 2011-2022 走看看