springboot+springsecurity+springsession实现session共享

11-SpringSecurity:Session共享 spring-boot-starter-test test 配置文件 server: port: 8000 spring: redis: host: 10.16.1.110 port: 6379 pool.max-idle: 8 pool.min-idle: 0 pool.max-active: 8 pool.max-wait: -1 password: timeout: 1000 资源接口 创建资源接口: 登录之后默认跳转 / ,展示当前服务的端口号。 @RestController publ 阅读详情

作为一个稀有的Java妹子,所写的所有博客都只是当作自己的笔记,留下证据自己之前是有用心学习的~哈哈哈哈(如果有不对的地方,也请大家指出,不要悄悄咪咪的不告诉我)

一、前言

在工作中遇到多系统时,比如oa人事相关的是独立的系统,在其他系统登录后,在这个系统不应该再让用户重新登录,想实现一次登录,多系统session共享,有很多种实现方式,针对web业务可以使用springsession,如果是移动端业务可以使用jwt的token,今天主要记录spring session。

二、jar包准备

在此之前已经整合好springboot和spring security,且已经实现了spring security的登录功能,在这基础上实现session共享。

 <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>2.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
</dependency>

如果项目中有用到redis,引入过redis的包就不用重复引入redis的包

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

三、配置类

1、redis的配置类,如果项目有就不需要引入

@Configuration
@Slf4j
public class RedisConfig extends CachingConfigurerSupport {

    /**
     * RedisTemplate配置
     *
     * @param factory
     * @return
     */
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        //定义value的序列化方式
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }

}

2、Springsession配置类

@Configuration
public class WebSessionConfiguration extends RedisHttpSessionConfiguration {

    public static String redisNamespace = "/supervision";
    @Value("${spring.session.redis.timeout:14400}")
    private int maxInactiveIntervalInSeconds;
    @Value("${spring.session.redis.flushMode:immediate}")
    private String flushMode;

    /**
     * 兼容1.X session的前缀,由于序列化问题,放弃兼容,改为其他方案、
     */
    static final String DEFAULT_SPRING_SESSION_REDIS_PREFIX = "spring:session:";

    @Bean
    public RedisIndexedSessionRepository sessionRepository() {
        RedisIndexedSessionRepository repository = super.sessionRepository();
        repository.setFlushMode(FlushMode.IMMEDIATE);
        repository.setDefaultMaxInactiveInterval(maxInactiveIntervalInSeconds);
        repository.setRedisKeyNamespace(DEFAULT_SPRING_SESSION_REDIS_PREFIX + redisNamespace);
        return repository;
    }

    @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
        cookieSerializer.setUseBase64Encoding(false);
        return cookieSerializer;
    }
}

配置完成后,就可以直接使用,不需要再写其他代码了,在一个系统登录后,就可以直接访问另外一个系统,不需要再次登录。以下几点是我在使用过程中遇到的需要注意的点:
注意
1、springsecurity中继承User的类需要单独打成jar,在各个系统中引入,因为springsession在缓存session的时候,是以sessionId为key,value里存了class的全路径名,如果包名不一致的话会报类转换出错

java.lang.ClassCastException: com.nmpa.risk.entity.AuthUserDetail cannot be cast to com.security.demo.configuration.web.AuthUserDetail

2、跨域问题,sessionId的生成是在同一个域名下保证生成一个,如果两个系统的域名不一样,session是无法共享的,可以使用nginx进行转发解决。

四、源码解析

我是参考的另一篇文章的,主要就是使用了SessionRepositoryFilter过滤器,所有请求都经过这个过滤器,在这个过滤器中重写了getSession的方法,会去redis里取。原文链接:https://www.cnblogs.com/54chensongxia/p/12096493.html

Springboot +spring security,如何解决Session共享问题 阅读详情

相关推荐

Spring Boot2 系列教程(二十八)Spring Boot 整合 Session 共享

就写到这了,也算是给这段时间的面试做一个总结,查漏补缺,祝自己好运吧,也希望正在求职或者打算跳槽的 程序员看到这个文章能有一点点帮助或收获,我就心满意足了。多思考,多问为什么。希望小伙伴们早点收到满意的offer!越努力越幸运!金九银十已经过了,就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。

2301_78398209的博客 1219

SpringBoot+SpringSecurity+SpringSession配置快速入门与应用场景分析

简介 公司有一个复杂项目,需要建设多个应用系统。例如:用户管理系统、门户系统、客户管理系统、采购系统、销售管理系统、库存系统等。所有系统的用户均需要通过用户管理系统进行统一授权,每个角色通过门户系统登录一次就可以跳转到所有授权的子系统。这种场景我们就需要建设一套单点登录的模式。常见的有CAS、OAuth2、LDAP等。初步调研后发现每种类型都有很多坑,而且最主要的是开发工作量大。有没有一...

satanradnana的专栏 2537

Springboot实现多服务器session共享

主要为大家详细介绍了Springboot实现多服务器session共享,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

Springboot整合springsession实现session共享

Springboot整合springsession实现session共享 简介 session我们之前有介绍过(可见springboot整合springsecurity),简单来说就是将用户信息或者数据存储在服务器上,通常用于验证用户身份或者避免通过获取相关信息。 但是,缺点也是非常明显: 占用服务器负载:我们可以使用token,用时间换取空间 对于多服务器环境,session无法共享 对于第二点缺点,我们目前有几种比较常用的解决方法 使用cookie加密的方式将session保存在客户端上

Cwh_971111的博客 4798

ClickHouse集群扩容实战:用clickhouse-copier搞定数据迁移与分片重平衡

本文详细介绍了使用clickhouse-copier工具实现ClickHouse集群从3分片到5分片的平滑扩容实战。通过分片级并行处理、原子性保证等核心机制,该工具能高效完成数据迁移与分片重平衡,同时保持服务连续性。文章涵盖集群拓扑规划、表结构检查、迁移配置、执行监控及迁移后优化等关键步骤,为大数据量场景下的ClickHouse扩容提供完整解决方案。

weixin_29091837的博客 292

音频降采样系数

如果需要把8K, 16K, 32K, 48K采样率的音频数据降为4K的音频数据, 最简单的方法根据降频倍数来取点, 但是线性度不好. 另一种线性度好一点的方法是: 取适当个数的点数, 各点乘以各自点的系数, 然后相加取平均值. 降频倍数与系数的关系如下: 2倍:     {0.3, 0.4, 0.3} 4倍:    {0.15, 0.2, 0.3, 0.2, 0.15} 8倍:   {0

joans123的专栏 4645

集群化部署,Spring Security 要如何处理 session 共享?

前面和大家聊了 Spring Security 如何像 QQ 一样,自动踢掉已登录用户(Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?),但是前面我们是基于单体应用的,如果我们的项目是集群化部署,这个问题该如何解决呢? 今天我们就来看看集群化部署,Spring Security 要如何处理 session 并发。 本文是 Spring Security 系列第 17 篇,阅读前面的文章有助于更好的理解本文: 挖一个大坑,Spring Security 开搞! 松哥手把手带你入门

江南一点雨的专栏 6001

EDA与机器学习融合:智能优化芯片设计流程的工程实践

机器学习作为数据驱动的核心技术,通过从历史数据中学习复杂模式,实现对系统行为的预测与优化。其原理在于构建模型,将输入特征映射到目标变量,从而揭示数据背后的内在规律。在工程领域,这项技术的核心价值在于能够将专家经验转化为可量化、可复用的智能模型,显著提升自动化水平与决策效率。电子设计自动化(EDA)是芯片设计的关键支撑,传统流程高度依赖人工试错,面临参数空间巨大、优化周期长等挑战。将机器学习应用于EDA,能够构建预测模型来预估设计性能(PPA),或通过代理模型加速设计空间探索,实现智能化的设计辅助与优化。本文

weixin_30411239的博客 684

springboot实现session共享

应用场景 如何解决 应用场景 session是指多个http请求共享的会话。如果我们后台只有一个服务器,则不存在共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题,先看一个简单的架构图: 如何解决 思路很简单,就是将各个服务之间需要共享的数据,保存到一个公共的地方 此时我们先创建新的springboot项目,引入 Web、Spring Session 以及security、 Redis: <dependencies> <dependency>

一个还在上学的程序缘 2689

Pandas实战指南:从数据结构到清洗聚合的完整解析

在数据分析工作中,表格数据处理是最常见的需求,无论是电商运营还是量化交易,都离不开对结构化数据的清洗与转换。Python生态中,Pandas凭借Series与DataFrame两种核心数据结构,将数据标签与数值绑定,实现自动对齐,极大简化了数据操作流程。它不仅是数据清洗的利器,也是分组聚合、透视表分析和时间序列处理的基础工具。掌握Pandas,意味着能够高效完成从数据读取、缺失值处理、类型转换到分组统计的完整分析流水线,将重复性报表工作自动化。本文基于实际使用经验,系统梳理Pandas的核心概念、常用操作、

weixin_30768881的博客 257

第44节:cesium 大雾效果(cesium自带)(含源码+视频)

cesium 大雾效果(cesium自带)

qq_29384639的博客 1702

2537-springsecurity系列--关于session的管理2-session缓存和共享

版本信息 &amp;lt;parent&amp;gt; &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;spring-boot-starter-parent&amp;lt;/artifactId&amp;gt; &amp;lt;version&

zzxx1994617的博客 1689

机器人控制算法九之 位姿描述与空间变换

机器人控制算法九之 位姿描述与空间变换

yohnyang的博客 1029

labwindows如何自动获取串口号_集群化部署,Spring Security 要如何处理 session 共享?

前面和大家聊了 Spring Security 如何像 QQ 一样,自动踢掉已登录用户(Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?),但是前面我们是基于单体应用的,如果我们的项目是集群化部署,这个问题该如何解决呢?今天我们就来看看集群化部署,Spring Security 要如何处理 session 并发。本文是 Spring Security 系列第 17 篇,阅读...

weixin_39768645的博客 116

windows server 2012安装升级MySQL

本篇文章主要介绍的是windows server 2012 R2操作系统安装升级以及过程中遇到的问题和对应的解决方法。(数据库低版本为:mysql-5.7.27-winx64;数据库数据库高版本为:mysql-5.7.44-winx64;提示:以下是本篇文章正文内容,下面案例可供参考。

qq_42776231的博客 780

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

SpringBoot权限管理和单点登录

SpringBoot权限管理和单点登录技术介绍S 技术介绍 这里运用到的技术有 SpringBoot + SpringSecurity + SpringSession + Redis,跟大家一起去了解一下每个框架的作用。 S

qq_32556919的博客 1168

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新版Spring Security & Spring Session 实现单点登录

Spring Security & Spring Session & Redis实现SSO

weixin_43626356的博客 1875

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

详解基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案

来源:https://www.jb51.net/article/115939.htm 本篇文章主要介绍了详解基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 分布式Web网站一般都会碰到集群session共享问题,之前也做过一些Spring3的项目,当时解决这个问题做过两种方案,一是利用n...

rentian1的博客 283

java面试背诵随笔(SpringBoot面试知识点 背诵第七天)

1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的? 4、Spring Boot 自动配置原理是什么? 5、你如何理解 Spring Boot 配置加载顺序? 6、spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何区别 ? 7、比较一下 Spring Security 和 Shiro 各自的优缺点 ? 8、Spring

lonzgzhouzhou的博客 291

.netcore 如何获取系统中所有session_集群化部署,Spring Security 要如何处理 session 共享?

前面和大家聊了 Spring Security 如何像 QQ 一样,自动踢掉已登录用户(Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?),但是前面我们是基于单体应用的,如果我们的项目是集群化部署,这个问题该如何解决呢?今天我们就来看看集群化部署,Spring Security 要如何处理 session 并发。本文是 Spring Security 系列第 17 篇,阅读...

weixin_39915605的博客 324

Springboot面试题总结

Springboot面试题总结

qq_55880012的博客 434

SpringBoot微服务中如何实现 session 共享 ?思维导图 代码示例(java 架构)

Spring Boot 微服务中的 Session 共享│├── 使用 Redis 作为分布式会话存储│ ├── 引入依赖 (spring-session-data-redis)│ ├── 配置连接池与序列化策略│ └── 设置Session超时时间│├── 使用 Spring Session 和 Spring Security│ ├── 自定义 SessionRepositoryFilter│ ├── 集成 OAuth2 或 JWT│ └── 处理跨域问题 (CORS)│。

qq_33240556的博客 632

17-Spring-Boot

面试

m0_37987631的博客 225

SpringBoot面试题

Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。Spring JavaConfig 是 Spring 社区的产品,它提供了配置 Spring IoC 容器的纯Java 方法。因此它有助于避免使用 XML 配置。使用 JavaConfig 的优点在于:(1)面向对象的配置。

RitaFrancis的博客 139

基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案

基于Spring Boot/Spring Session/Redis的分布式Session共享解决方案

10年职场两茫茫,35岁凄凉奈若何 132
上一篇: Spring:ApplicationEventPublisher事件发布与监听
下一篇: nacos配置数据库,实现配置文件的持久化
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值