首页 > 其他分享 >【Spring Security OAuth2】- Spring Social第三方登录 - 单机session管理

【Spring Security OAuth2】- Spring Social第三方登录 - 单机session管理

时间:2024-10-13 09:22:22浏览次数:8  
标签:OAuth2 码哥 登录 Spring session 失效 超时 源码

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

单机session管理

到目前为止三个功能:

  • 用户名 + 密码登录
  • 手机号 + 短信登录
  • 社交网站登录

前两种使用表单提交方式完成,后一种使用oath授权完成;

虽然表现方式和处理流程不同,但是有一个共同点,认证后的用户信息是存放在session中的;

  • session超时

    • 如何管理超时时间
    • 超时后如何处理
  • session并发 : a 机器登录,又在b机器登录的场景下,只运行一台机器登录

    • 如何保持后来者生效,之前的失效
  • 集群session管理
    均衡负载如果没有做session粘连的话,会出现登录在a机器,请求数据在b机器

session超时

注意:server.session.timeout 已经过时了

    server:
      port: 80
      servlet:
        session:
          timeout: 10s

重启测试,发现并没有超时;在以下源码中限制了最小为1分钟;

    org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory#configureSession

实现session超时提醒

session超时之后,再次访问进行一个提醒要怎么做呢?

    cn.mrcode.imooc.springsecurity.securitybrowser.BrowserSecurityConfig#configure
    
    配置下session失效跳转的url地址,这个地址需要我们实现。你可以做任何的业务逻辑;同时记得放行该地址,否则又被拦截授权了
    .and()
    .sessionManagement()
    .invalidSessionUrl("/session/invalid")
    cn.mrcode.imooc.springsecurity.securitybrowser.BrowserSecurityController#sessionInvalid
    这里就打印下消息
    
    @GetMapping("/session/invalid")
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public SimpleResponse sessionInvalid() {
        String message = "session失效";
        return new SimpleResponse(message);
    }

实现session并发登录控制

    // 配置地址或则策略类
    .maximumSessions(1) //限制同一个用户只能有一个session登录
    //.expiredUrl("/session/expired") // 也可以跳转到一个服务
    .expiredSessionStrategy(new MySessionInformationExpiredStrategy())  // 失效后的策略。定制型更高,失效前的请求还能拿到

编写策略类

    /**
     * session并发登录失效策略
     * @author : zhuqiang
     * @version : V1.0
     * @date : 2023/8/6 21:28
     */
    public class MySessionInformationExpiredStrategy implements SessionInformationExpiredStrategy {
        @Override
        public void onExpiredSessionDetected(SessionInformationExpiredEvent event) throws IOException, ServletException {
            // 该对象能获取到访问失效前的url地址
            event.getResponse().setContentType("application/json;charset=UTF-8");
            event.getResponse().getWriter().write("session并发登录");
        }
    }

测试:在不同浏览器登录,然后在最开始登录的浏览器中访问一个服务查看下;

实现session并发登录策略2

    .maximumSessions(1) //限制同一个用户只能有一个session登录
    .maxSessionsPreventsLogin(true)  // 当session达到最大后,阻止后登录的行为

测试会提示:”Maximum sessions of 1 for this principal exceeded”

代码重构,消除重复代码,可提供可配置功能

这里尝试自己看一遍视频,然后全程去思考如何提出来。不行的时候再看源码

重构的时候需要注意一个坑:

    /** 当session达到最大值后,是阻止用户登录还是剔除掉已登录用户
     * fasle : 会走{@link cn.mrcode.imooc.springsecurity.securitybrowser.session.MySessionInformationExpiredStrategy}
     * true:会阻止登录,这个阻止登录的个性化消息没有设置,看源码的时候好像可以覆盖那个过滤器;设置为true会看到报错信息,然后就可以查看覆盖说明了
     * */
    private boolean maxSessionsPreventsLogin;

标签:OAuth2,码哥,登录,Spring,session,失效,超时,源码
From: https://blog.csdn.net/smart_an/article/details/142893212

相关文章

  • Java项目:高校心理辅导系统(java+SpringBoot+Vue+elementui+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于Springboot+vue高校心理教育辅导设计与实现本系统分为前后台,包含管理员、学生、教师三种角色,前台为学生、教师登录,后台为管理员、学生、教师分别登录。前台主要功能:首页、心理健康学习、试卷列表、公告通知、留言反馈、......
  • Java项目:母婴商城系统(java+SpringBoot+Mybaits+Vue+elementui+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于Springboot+vue的母婴商城系统本系统分为前后台,包含管理员、用户两种角色,前台为普通用户登录,后台为管理员、用户分别登录。前台主要功能:首页、商品信息、商品资讯、用户登录、用户注册、用户个人中心、我的订单、我的地......
  • Java项目:房产销售系统(java+SpringBoot+Mybaits+Vue+elementui+mysql)
    源码获取:俺的博客首页"资源"里下载! 项目介绍基于Springboot+vue的房产销售系统本系统分为前后台,包含管理员、用户、销售经理三种角色,前台为普通用户登录,后台为管理员、用户、销售经理分别登录。前台主要功能:首页、房源信息、用户登录、用户注册、用户个人中心、我的收......
  • Springboot在线学习辅导管理系统--49101(免费领源码)可做计算机毕业设计JAVA、PHP、爬虫
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线学习辅导管理系统等问题,对在线学习辅导管理系统进行研究分析,然后开发设计出在线学习辅......
  • Springboot一个小说阅读APP的设计与实现--48151(免费领源码)可做计算机毕业设计JAVA、PH
    摘 要大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在小说在线阅读的需求下,开发一款小说阅读APP,将复杂的系统进行拆分,能够实现对需求的变化快速响应、系统稳定性的保障,能保......
  • Solon-Boot 与 SpringBoot 的概念不同
    平常我们是拿Solon生态与SpringBoot生态作比较。而非Solon-Boot(仅是功能模块)与SpringBoot生态,但这两名字太容易让人误解了。Solon-BootSolon-Boot仅表示Solon的“服务端“启动模块组(相当于Solonserverbootstrap)。它是个“功能性”模块划分概念,跟Solon-Data,So......
  • 基于springboot的蔬菜农场信息管理系统java项目商城销售系统
    基于Java和SpringBoot的蔬菜农场信息管理系统是为了实现蔬菜农场的现代化、高效化管理而设计的。该系统在种植管理方面,可详细记录蔬菜的种植信息,包括蔬菜品种、种植日期、种植区域、种植方法等,方便农场工作人员对种植过程进行精准把控。生长监测模块能实时记录蔬菜的......
  • 基于java+springboot的书洞小程序设计图书阅读交流分享系统
    基于Java和SpringBoot的书洞小程序是一款为阅读爱好者打造的便捷图书交流与分享平台。该小程序在图书资源展示方面丰富多样,用户可以浏览各类图书的详细信息,包括书名、作者、出版社、出版年份、书籍简介等,同时配有书籍封面图片,让用户能更直观地了解图书内容。社交互动......
  • Java项目:227基于Springboot + vue实现的仓库管理系统
    作者主页:夜未央5788 简介:Java领域优质创作者、Java项目、学习资料、技术互助文末获取源码项目介绍本项目为前后端分离的项目;系统分为用户、管理员和超级管理员三个角色本系统包含登录、主页、个人中心、用户信息管理、仓库信息管理(出库、入库)、物品分类管理、物品信息......
  • SpringCloud网关聚合knife4j方案
    微服务开发中想将Spring-Cloud-Gateway网关聚合knife4j,形成一个统一入口方便查阅的开发辅助接口文档,并且将Swagger抽取成一个公共模块,那么我们可以参考以下的做法约定:JavaVersion:11.0.24SpringBoot:2.7.18knife4j:4.4.0Swagger公共模块抽取依赖<dependencies><!--Sp......