广告
返回顶部
首页 > 资讯 > 数据库 >Redis实现Session共享与单点登录
  • 567
分享到

Redis实现Session共享与单点登录

RedisSession共享RedisSession单点登录 2022-07-12 10:07:10 567人浏览 八月长安
摘要

首先,导包。 在pom.XML文件里面加入以下: <dependency> <groupId>org.springframework.boot</groupId> <

首先,导包。

在pom.XML文件里面加入以下:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-Redis</artifactId>
</dependency>
 
<dependency>
   <groupId>org.springframework.session</groupId>
   <artifactId>spring-session-data-redis</artifactId>
</dependency>

jar包不做多解释了,看那个artifactId的内容应该能知道干啥的。

然后是yml文件:

spring:
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    passWord:
    jedis.pool.max-idle: 100
    jedis.pool.max-wait: -1ms
    jedis.pool.min-idle: 2
    timeout: 2000ms

是的,很精简。

然后是,到你的RedisConfig文件上面,开启redis的session关联注解(其实不用这个注解也是没问题的,后面自己可以去除看看。)

@EnableRedishttpsession(maxInactiveIntervalInSeconds=60) 这边是设置存入redis里面的值的过期时间。

默认不设置的话,是1800秒即30分钟。

@EnableRedisHttpSession

如:

Redis实现Session共享与单点登录

OK,我们开始共享session咯!

在controller文件里面写2个方法吧

@GetMapping("/setSessionValue")
public String setredisResult(HttpServletRequest request){
    request.getSession().setAttribute(request.getSession().getId(), "---测试数据---"+request.getRequestURL());
 
    System.out.println(request.getSession().getId());
    return "set成功,已经存入session域且redis里面也会有值";
}
 
@GetMapping("/getSessionValue")
public String redisResult(HttpServletRequest request) {
    System.out.println(request.getSession().getId());
    String value = String.valueOf(request.getSession().getAttribute(request.getSession().getId()));
    
    return "取值成功         :"+value;
}

先运行第一个, 如下:

Redis实现Session共享与单点登录

控制台打印出sessionid值:

Redis实现Session共享与单点登录

然后再瞟一眼redis数据库,是的,没错,可以看到redis也存储了这个session会话的相关信息。 (TTL是过期时间)

Redis实现Session共享与单点登录

Redis实现Session共享与单点登录

然后访问下第二个接口,可以看到根据sessionid作为Key去session域是能正常获取值的,

Redis实现Session共享与单点登录

好了,redis实现session共享到此其实已经完毕了!

有人可能会有疑问,怎么体现共享了? 这时候,你如果实现负载均衡,开启两个Tomcat服务器,不同端口,然后用通过浏览器通过不同端口去访问,你会发现,通过request.getSession().getId()拿出来的sessionid是一样一样的!

那么接下来简单介绍下,使用这个唯一id来实现单点登录

 @GetMapping("/userLogin")
    public String setRedisResult(HttpServletRequest request){
 
        //第一次登录
 
        //1. 取出当期客户端的sessionId
        String sId=request.getSession().getId();
        //2. 查询该sessionId 是否存在于redis
        boolean exists = redisUtils.exists(sId);
 
        if (!exists){
            //2.1未登录过,进行用户信息的校验
            //如果通过后,写入session域进行共享,即使是负载不同端口,sessionId不会发生变化
            request.getSession().setAttribute(sId, "login success");
            redisUtils.setWithTime(sId,"login success",1000);
            return "success login!";
 
            //如果不通过,那么返回登录页面,省略
        }else {
            //2.2 已经登录过,则存入redis中刷新过期时间,再直接返回成功页面
            redisUtils.setWithTime(sId,"login success",1000);
            return " yes,you are allow!";
        }
 
    }
 
    @GetMapping("/userLoginOut")
    public String userLoginOut(HttpServletRequest request){
 
        String sId=request.getSession().getId();
        redisUtils.remove(sId);
        return "login out!";
    }

ps:代码里使用到的工具类RedisUtils 在之前的文章里有

可以看到以上情况其实单纯使用redis配合sesionid共享后就能完成单点登录;

题外补充:
但是以上这种情况是使用上了redis的session共享,保证了sessionId不变,所以每次去出来,在有效时间内都是一样的。
既然都讲到了单点登录吗,那么如果单纯使用redis不使用session共享怎么去实现呢?那就是将第一次登录的sessionId保存在浏览器cookise里,这样每次登录通过cookise去拿出头一次固定不变的sessionid,来判断用户是否有登录过。
这种思路实现方案是:

 //登录接口
    @GetMapping("/userLogin")
    public String setRedisResult(HttpServletRequest request, HttpServletResponse response){
        
        //第一次登录
 
        //1. 取出当期客户端的sessionId
        String sId=request.getSession().getId();
 
        String cookies = getCookies(request);
 
        if (cookies==null || cookies.equals("")){
 
            System.out.println("没有登录过,准备进行登录!");
            //执行登录逻辑
 
            //写入cookie
            writeLoginToken(response,sId); //这里设置cookie的过期时间应当与redis设置的时间且与session失效时间保持一致
            //写入redis
            redisUtils.setWithTime(sId,"userInfo",1000);
            System.out.println("登录成功!");
            return "success login!";
        }else{
 
            boolean exists = redisUtils.exists(cookies);
            if (exists){
 
                System.out.println("已经登录过,正常登录!");
                return " yes,you are allow!";
            }else {
 
                return "信息异常不允许登录";
            }
        }
    }

到此这篇关于Redis实现Session共享与单点登录的文章就介绍到这了,更多相关Redis Session共享与单点登录内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

您可能感兴趣的文档:

--结束END--

本文标题: Redis实现Session共享与单点登录

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

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

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

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

下载Word文档
猜你喜欢
  • Redis实现Session共享与单点登录
    首先,导包。 在pom.XML文件里面加入以下: <dependency> <groupId>org.springframework.boot</groupId> <...
    99+
    2022-07-12
    RedisSession共享 RedisSession单点登录
  • Redis的共享session应用实现短信登录
    目录1. 基于 session 实现短信登录1.1 短信登录流程图1.2 实现发送短信验证码1.3 实现短信验证码登录、注册1.4 实现登录校验拦截器2. 集群的 session 共享问题3. 基于 Redis 实现共享...
    99+
    2022-08-17
    Redissession短信登录 Redis共享session
  • SpringBoot集成redis与session实现分布式单点登录
    目录单点登录 SSO(Single Sign On)什么是单点登录?实现方式开发技术单点登录实现流程实现案例看效果前言: 由于考虑到cookie的安全性问题,就有了下面这个版本的ss...
    99+
    2022-11-13
  • Redis的共享session应用如何实现短信登录
    本篇内容介绍了“Redis的共享session应用如何实现短信登录”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2022-10-19
  • SpringBoot+SpringSession+Redis实现session共享及唯一登录示例
    最近在学习springboot,session这个点一直困扰了我好久,今天把这些天踩的坑分享出来吧,希望能帮助更多的人。 一、pom.xml配置  <depend...
    99+
    2022-11-12
  • spring boot与redis 实现session共享教程
    如果大家对spring boot不是很了解,大家可以参考下面两篇文章。Spring Boot 快速入门教程Spring Boot 快速入门指南这次带来的是spring boot + redis 实现session共享的教程。在spring ...
    99+
    2023-05-31
    spring boot redis
  • Redis如何实现Session共享
    这篇文章运用简单易懂的例子给大家介绍Redis如何实现Session共享,代码非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Redis实现Session共享这几天在做session共享这么一...
    99+
    2022-10-18
  • redis实现session共享的方法
    目录引言案例介绍具体操作引言 大厂很多项目都是部署到多台服务器上,这些服务器在各个地区都存在,当我们访问服务时虽然执行的是同一个服务,但是可能是不同服务器运行的; 在我学习项目时遇到这样一个登录情景,假设有如下三台服务器...
    99+
    2023-04-14
    redis session共享 Redis共享 Session
  • SpringBoot+SpringSession+Redis怎么实现session共享
    这篇文章主要介绍SpringBoot+SpringSession+Redis怎么实现session共享,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot是什么springboot一种全新的编程规范,其...
    99+
    2023-06-14
  • 在Spring-Session使用Redis如何实现共享session
    这期内容当中小编将会给大家带来有关在Spring-Session使用Redis如何实现共享session,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、添加依赖<dependency> &l...
    99+
    2023-05-31
    spring session redis
  • Java简单实现短信验证登录(Session、Redis)
    前端设计 {{codeBtnMsg}} 未注册...
    99+
    2023-09-27
    java redis 前端
  • 利用 PHP Session 跨域实现单点登录
    随着互联网技术的发展,单点登录(Single Sign-On,简称 SSO)成为了很多网站和应用程序的需求。SSO 可以使用户通过一次登录验证,即可在多个相关域中无需再次登录。在本文中,我们将介绍如何使用 PHP Session 跨域实现单...
    99+
    2023-10-21
    PHP Session 跨域 单点登录
  • redis实现session共享的方法是什么
    这篇文章主要介绍“redis实现session共享的方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“redis实现session共享的方法是什么”文章能帮助大家解决问题。引言大厂很多项目都是...
    99+
    2023-07-06
  • SpringCloud开启session共享并存储到Redis的实现
    目录一、原架构二、调整架构以及相应的代码1、Redis和session的配置2、增加配置类3、应答过滤器增加session设置4、增加控制台处理的过滤器ConsoleFilter5、...
    99+
    2023-02-14
    SpringCloud session共享 SpringCloud开启session共享 Redis存储
  • 怎么在Spring Boot中利用Redis实现session共享
    本篇文章给大家分享的是有关怎么在Spring Boot中利用Redis实现session共享,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。引入spring-boot-start...
    99+
    2023-05-30
    springboot session redis
  • 单点登录原理与技术实现比较
    1.1  单点登录原理与技术实现比较1.1.1  单点登录原理单点登录(SSO)是指一个用户身份只需进行一次鉴权便可以访问所有经授权的资源,而不需要多次认证。SSO机制能够减少人为错误,同时提高整个系统的安全性...
    99+
    2023-06-05
  • springbootoauth2实现单点登录实例
        我们见过的很多网站,容许使用第三方账号登录,他不需要关注用户信息,只需要用户拿到授权码就可以访问。     oauth2是用...
    99+
    2022-11-12
  • SpringSecurityOAuth2单点登录和登出的实现
    目录1. 单点登录1.1 使用内存保存客户端和用户信息1.2 使用数据库保存客户端和用户信息1.3 单点登录流程1.3 JWT Token2. 单点登出3. 总结参考:Spring ...
    99+
    2022-11-13
  • 若依ruoyi实现单点登录
    系统说明(两个系统数据库用户信息username是同步的,都是唯一的) 第三方平台 若依系统(ruoyi分离版) 登录需求: 我登录到第三方平台,第三方平台嵌入我们的若依,所以在跳若依的管理页面时不想再登录了。但是验证是需要把第三方平台的t...
    99+
    2023-10-02
    java 用户登录
  • java单点登录(SSO)的实现
    单点登录(SSO):SSO是指在多个应用系统中个,用户只需要登陆一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一用户的登陆的机制。 SSO的实...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作