iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Redis实现单设备登录的场景分析
  • 914
分享到

Redis实现单设备登录的场景分析

2024-04-02 19:04:59 914人浏览 八月长安
摘要

目录用户登录拦截器注册拦截器在有些场景下,我们希望用户一个账号只能登录一个设备。 这个时候我们可以用Redis来实现。 原理: 用户首次登录时,将用户信息存入Redis,key是用户

在有些场景下,我们希望用户一个账号只能登录一个设备。

这个时候我们可以用Redis来实现。

原理: 用户首次登录时,将用户信息存入Redis,key是用户id,value是token。当用户在其他设备登录时,会重新生成token,这个时候原先的token已经被覆盖了。所以用户在访问需要登录账号的操作时,系统会拦截请求判断token是否存在。当然是不存在的,所以我们就实现了单个设备登录的需求。

这里只提供大概的样例。

用户登录

@PostMapping("login")
@apiOperation(value = "用户登录",notes = "用户登录")
public GraceJSONResult login(@RequestParam String userId,httpservletRequest request) throws Exception {
    String uToken = UUID.randomUUID().toString();
    //把token存入redis
    redis.set("redis_user_token"+":"+userId,uToken);
    //返回用户信息,包含token
    return GracejsONResult.ok(usersVO);
}

拦截器

拦截哪些操作需要用户登录,在拦截器中实现单设备登录。

说明:BaseInfoProperties是共有的代码,集成这个类就可以直接使用reidis。

public class BaseInfoProperties {
    @Autowired
    public RedisOperator redis;
}

说明:GraceException是自定义的抛出异常的类,这里不做展示。

public class UserTokenInterceptor extends BaseInfoProperties implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String userId = request.getHeader("headerUserId");
        String userToken = request.getHeader("headerUserToken");
        // 判断用户id和token是否为空
        if(StringUtils.isNotBlank(userId) && StringUtils.isNotBlank(userToken)){
            String redisToken=redis.get(REDIS_USER_TOKEN+":"+userId);
            //判断token是否失效
            if(StringUtils.isBlank(redisToken)){
                GraceException.display(ResponseStatusEnum.UN_LOGIN);
                return false;
            }else {
                //判断token是否一致,如果不一致,表示用户在别的手机端登录,token被覆盖了
                if(!redisToken.equalsIgnoreCase(redisToken)){
                    GraceException.display(ResponseStatusEnum.TICKET_INVALID);
                    return false;
                }
            }
        }else {
            // 用户id和token为空
            GraceException.display(ResponseStatusEnum.UN_LOGIN);
            return false;
        }

        return true;
    }
}

注册拦截器

@Configuration
public class InterceptorConfig implements WEBmvcConfigurer{
    @Override
    public void addInterceptors(InterceptorReGIStry registry) {
        //要拦截的请求,哪些需要登录
        registry.addInterceptor(userTokenInterceptor())
                .addPathPatterns("/userInfo/modifyUserInfo")
                .addPathPatterns("/userInfo/modifyImage");
    }
    //用户未登录拦截器
    @Bean
    public UserTokenInterceptor userTokenInterceptor() {
       return  new UserTokenInterceptor();
    }
}

到此这篇关于Redis实现单设备登录的文章就介绍到这了,更多相关redis单设备登录内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Redis实现单设备登录的场景分析

本文链接: https://www.lsjlt.com/news/146480.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Redis实现单设备登录的场景分析
    目录用户登录拦截器注册拦截器在有些场景下,我们希望用户一个账号只能登录一个设备。 这个时候我们可以用Redis来实现。 原理: 用户首次登录时,将用户信息存入Redis,key是用户...
    99+
    2024-04-02
  • Unity实现简单场景分层移动
    本文实例为大家分享了Unity实现简单场景分层移动的具体代码,供大家参考,具体内容如下 前言 开发游戏经常需要用到把前景、场景、背景等不同层级的物体进行不同速度的移动以实现真实感。 ...
    99+
    2024-04-02
  • drools的简单入门案例场景分析
    目录一、背景1.Drools介绍二、为什么要学习drools三、实现上方这个简单的打折案例1、引入jar包2、编写kmodule.xml配置文件3、编写规则文件1、规则文件的语法2、...
    99+
    2024-04-02
  • SpringBoot集成redis与session实现分布式单点登录
    目录单点登录 SSO(Single Sign On)什么是单点登录?实现方式开发技术单点登录实现流程实现案例看效果前言: 由于考虑到cookie的安全性问题,就有了下面这个版本的ss...
    99+
    2024-04-02
  • Redis在实时数据分析中的应用场景有哪些
    Redis在实时数据分析中的应用场景包括: 缓存数据:Redis可以作为缓存存储数据,以提高读取速度和减少数据库负载。 计数...
    99+
    2024-05-07
    Redis
  • redis的五大数据类型应用场景分析
    目录1、对象的类型与编码2、字符串对象3、列表对象4、哈希对象5、集合对象6、有序集合对象7、五大数据类型的应用场景1、对象的类型与编码   Redis使用前面说的五大数据类型来表示...
    99+
    2024-04-02
  • Spring Boot整合Zookeeper实现分布式锁的场景分析
    目录一、Java当中关于锁的概念1.1.什么是锁1.2.锁的使用场景1.3.什么是分布式锁1.4.分布式锁的使用场景二、zk实现分布式锁2.1.zk中锁的种类:2.2.zk如何上读锁...
    99+
    2024-04-02
  • 详解PHP SSO单点登录的优势和应用场景
    随着互联网的快速发展和应用增多,用户需要同时登录多个网站或应用的情况也越来越普遍。这就带来了一个问题:如果每个网站都要求用户进行登录,用户需要记住多个账号和密码,不仅麻烦而且容易忘记。为了解决这个问题,单点登录(Single Sign-On...
    99+
    2023-10-21
    提高安全性
  • JVM类加载场景的实例分析
    JVM类加载场景的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。JVM是Java Virtual  Machine(Java虚拟机)的缩写,J...
    99+
    2023-06-16
  • SpringBoot集成Redisson实现延迟队列的场景分析
    使用场景 1、下单成功,30分钟未支付。支付超时,自动取消订单 2、订单签收,签收后7天未进行评价。订单超时未评价,系统默认好评 3、下单成功,商家5分钟未接单,订单取消 4、配送超...
    99+
    2024-04-02
  • Java简单实现短信验证登录(Session、Redis)
    前端设计 {{codeBtnMsg}} 未注册...
    99+
    2023-09-27
    java redis 前端
  • PHP逻辑的实际应用场景分析
    PHP作为一种流行的服务器端脚本语言,主要用于开发Web应用程序。它具有灵活、简单易学的特点,因此在各种项目中得到了广泛应用。本文将从实际应用场景出发,分析PHP逻辑的使用,并提供具体...
    99+
    2024-03-06
    用户权限控制 表单提交 lsp
  • HTML5实现QQ登录的示例分析
    这篇文章主要介绍了HTML5实现QQ登录的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。<!DOCTYPE html...
    99+
    2024-04-02
  • NodeJS实现单点登录原理解析
    目录什么是单点登录单点登录原理NodeJS 演示三个不同的服务首次访问跳转至登录页应用A判断登录态,跳转到SSO认证服务器认证服务器判断登录态,渲染登录页校验用户信息,创建令牌从认证...
    99+
    2024-04-02
  • spring boot 动态生成接口实现类的场景分析
    目录一:定义注解二:建立动态代理类三:注入spring容器四:编写拦截器五:新建测试类在某些业务场景中,我们只需要业务代码中定义相应的接口或者相应的注解,并不需要实现对应的逻辑。 比...
    99+
    2024-04-02
  • SpringSecurity 表单登录的实现
    目录表单登录登录成功登录失败注销登录自定义注销成功的返回内容表单登录 @Configuration public class SecurityConfig extends We...
    99+
    2024-04-02
  • Python 中的装饰器实现函数的缓存(场景分析)
    装饰器模式在以下场景中被广泛应用: 动态地向对象添加职责或行为,而不需要更改对象的代码。例如,可以通过装饰器模式来实现日志记录、性能分析、缓存等功能,而不会影响原始对象的行为。对已有...
    99+
    2023-02-28
    Python装饰器实现函数缓存 Python装饰器实现缓存 Python装饰器
  • Redis分布式锁怎么实现及应用场景是什么
    本篇内容介绍了“Redis分布式锁怎么实现及应用场景是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!引言锁是开发过程中十分常见的工具,你...
    99+
    2023-06-29
  • redis五大数据结构和使用场景的示例分析
    这篇文章主要介绍redis五大数据结构和使用场景的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!老规矩,先抛结论后验证string:有点像java的hashMap,存的时候什么key,取的时候也什么key,常...
    99+
    2023-06-14
  • 利用consul在spring boot中实现分布式锁场景分析
    因为在项目实际过程中所采用的是微服务架构,考虑到承载量基本每个相同业务的服务都是多节点部署,所以针对某些资源的访问就不得不用到用到分布式锁了。 这里列举一个最简单的场景,假如有一个智...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作