oracle不同session共享变量,SpringMVC使用oracle配置session共享

简述

由于开发是单机项目,但是到了配置负载均衡的集群中就发生了问题,使用账号登录后又跳回主页面。

我分析了原因是负载均衡配置的跳转是每次访问都会切换服务,所以在A机器登录后,再次访问B机器找不到有登录状态的session,而我的过滤器里面配置了不登录就会跳到首页,所以在B机器上给跳回了首页,这样就会一直登陆失败。

解决办法就是配置session共享,看了大多数的session共享都是用的Redis做的,但是本着不增加项目架构复杂度的想法,便使用了本身的项目数据库–oracle。

使用了spring提供的session共享方案,spring-session。

spring-session的Github地址:https://github.com/spring-projects/spring-session

数据库表

使用JDBC做session共享需要在对应库中增加表,里面包含了各种库的对应的表信息,可参考: https://github.com/spring-projects/spring-session/tree/master/spring-session-jdbc/src/main/resources/org/springframework/session/jdbc

这里是2.x版本的sql,如果是1.x版本是没有PRIMARY_ID字段的,要在下面maven依赖中选择对应的版本,不然运行报错。

CREATE TABLE SPRING_SESSION (

PRIMARY_ID CHAR(36) NOT NULL,

SESSION_ID CHAR(36) NOT NULL,

CREATION_TIME NUMBER(19,0) NOT NULL,

LAST_ACCESS_TIME NUMBER(19,0) NOT NULL,

MAX_INACTIVE_INTERVAL NUMBER(10,0) NOT NULL,

EXPIRY_TIME NUMBER(19,0) NOT NULL,

PRINCIPAL_NAME VARCHAR2(100 CHAR),

CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)

);

CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);

CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);

CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);

CREATE TABLE SPRING_SESSION_ATTRIBUTES (

SESSION_PRIMARY_ID CHAR(36) NOT NULL,

ATTRIBUTE_NAME VARCHAR2(200 CHAR) NOT NULL,

ATTRIBUTE_BYTES BLOB NOT NULL,

CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),

CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE

);

Maven依赖

这里对应的找到2.x版本的依赖,如果没有maven,要引入如下jar:spring-jdbc、spring-session-core、spring-context

org.springframework.sessiongroupId>

spring-session-jdbcartifactId>

2.0.2.RELEASEversion>

dependency>

application.xml配置

bean>

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

bean>

web.xml

spring session通过自定义一个filter,通过filter职责链将用自己定义的request替换httpservletrequest,从而使用自己httpsession。配置一下Filter,把他放在最前面,使其优先执行

springSessionRepositoryFilterfilter-name>

org.springframework.web.filter.DelegatingFilterProxyfilter-class>

filter>

springSessionRepositoryFilterfilter-name>

/*url-pattern>

filter-mapping>

总结

整和共享session步骤:增加数据库表,添加依赖,配置spring的xml,增加过滤器让request获取spring-session-jdbc中的session。

整合之后,可以登录到项目中,并在数据库的SPRING_SESSION、SPRING_SESSION_ATTRIBUTES表中看到相应的信息,而session存活时间也与原来相同,不影响其他逻辑。

参考

官方文档

XML配置spring session jdbc实现session共享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464459.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google Earth 和MS Virtual Earth:虚拟地球简介

自从Goal在98年提出数字地球(Digital Earth)之后,全球掀起了数字地球热,而随着Goal的竞选总统的失利和当时科学技术和硬件水平的限制,数字地球一直处于慢慢发展状态。其中它涉及到很多学科包括地理对象的描述、存储、建…

转些别人收集的歌

2019独角兽企业重金招聘Python工程师标准>>> 【Anaesthesia】Maximilian Hecker强烈推荐 【Summer Days In Bloom】Maximilian Hecker力推! 【end of May】Keren Ann 【gotta have you】The Weepies调调很特别,我用它做过背景音乐。 …

Linux社区关于链表的bug讨论我们要看一下

最近在Linux社区看到一个关于内核链表的讨论原文讨论链接:https://lwn.net/SubscriberLink/885941/01fdc39df2ecc25f/先用例子说明怎么使用内核链表list.h/* SPDX-License-Identifier: GPL-2.0 */ #ifndef LIST_H #define LIST_H/** Copied from include/linux/...*…

多图上传乱序php,discuz图片顺序混乱解决方案_php技巧

说明discuz在发表帖子的时候,添加多张图片,然后直接发表帖子,图片顺序有时候会乱掉即使上传图片窗口中图片顺序正确,发布之后还是会乱掉分析看url,程序代码中看不出什么将图片名改为序号上传,顺序乱了&…

在.NET中excel导出方法汇总(收集)

http://search.csdn.net/Expert/topic/2346/2346423.xml?temp.3901941http://search.csdn.net/Expert/topic/2387/2387301.xml?temp3.222293E-02http://search.csdn.net/Expert/topic/2581/2581246.xml?temp.9223444http://search.csdn.net/Expert/topic/2414/2414749.xml?…

进程之间的同步机制

多进程的系统中避免不了进程间的相互关系。本讲将介绍进程间的两种主要关系——同步与互斥,然后着重讲解解决进程同步的几种机制。 进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。通常的情况是两个或两个以上的进程需要同时访问某…

(二)AS给button添加点击事件

三种方法给Button添加点击事件 &#xff08;一&#xff09;通过button的id&#xff0c;添加继承View.OnClickListener的监听实现 <Buttonandroid:id"id/btn_button2"android:text"按钮2"android:layout_width"match_parent"android:layout_he…

MongoDB(4)--MongoDB服务的启动

原始方式 只有启动了MongoDB的服务&#xff0c;才能使用MongoDB的功能&#xff0c;通常情况下会开一个命令窗口&#xff0c;输入下面的命令来启动服务&#xff1a; 配置文件方式 如果不想每次启动的时候都在命令行中输入很多繁琐的参数&#xff0c;可以把参数信息保存在配置文件…

我张哥做的这ARM开发板,真酸爽!

本文导读&#xff1a;市场普及度最高的A7处理器&#xff0c;核心板所有设计资料、生产资料全部开放&#xff01;包含核心板原理图、PCB、BOM、uboot源码、Linux内核所有驱动源码、文件系统等&#xff0c;并提供测试与验证方案&#xff01;武汉万象奥科&#xff08;www.vanxoak.…

oracle rac维护命令,2015年oracle rac日常基本维护命令.doc

Oracle RAC 资料收集http://www.D数据库吧oracle rac日常基本维护命令2Oracle RAC性能调整12详解Oracle RAC入门和提高27ORACLE RAC数据库配置Dataguard环境49老白对于RAC应用调优的建议51oracle rac日常基本维护命令所有实例和服务的状态$ srvctl status database -d orclInst…

linux嵌入式开发流程,听听牛人怎么说

很多学习嵌入式的人来说&#xff0c;都会学习嵌入式linux开发&#xff0c;在学习的过程中&#xff0c;总会有很多难题&#xff0c;相对而言&#xff0c;嵌入式linux也算是嵌入式学习中比较难的&#xff0c;那如何可以攻破这个难点&#xff0c;那么我们就需要从根本入手&#xf…

搭建LNMP遇到的问题

配置PHP的执行./buildconf --force出现一下错误 buildconf: Your version of autoconf likely contains buggy cache code. Running vcsclean for you. To avoid this, install autoconf-2.13. 解决方案&#xff1a;安装autoconf-2.13.RPM包 执行export …

从文件中读取数据,排序之后输出到另一个文件中

文件中有一组数据&#xff0c;要求排序后输出到另一个文件中去 主要有两个知识点&#xff1a; 排序、文件操作 C/C代码如下&#xff1a; [cpp] view plaincopy #include<iostream> #include<fstream> #include<vector> using namespace std; void Or…

从单片机转到嵌入式Linux的跨度大吗?

这是我今天一个同学问我的我再零散的说一些观点&#xff0c;如果大家有这方面的经验&#xff0c;也帮忙在文章下留言&#xff0c;谢谢大家。先说共同点单片机和嵌入式他们最终都是要跑硬件的&#xff0c;所以你也会遇到像GPIO口、I2C、串口、SPI、定时器、看门狗这些问题。所以…

oracle如何取uuid,oracle如何取得uuId

是想生成GUID吗&#xff1f;SQL> select sys_guid() from dual;SYS_GUID()--------------------------------F18031C69D8345DEB305D4B2E796A282-------------------------------------------------java取得uuidpackage com.hdsoft.uuid;import java.util.UUID;public class …

有一种豁达叫开源

当人们在讨论开源的时候&#xff0c;第一时间想到的是索取&#xff0c;开源对很多开发者来说是好的事情&#xff0c;但是闭源对很多科技企业是有技术保护作用的。人们对软件的态度是经历过很多次变化的。在现代计算机研发初期&#xff0c;核心问题是硬件&#xff0c;寻找实现记…

JS应用DOM入门:DOM的对象属性

DOM提供了一套属性用于导航、访问和更新文档内容&#xff0c;其中包括只读类型的属性和可读写类型的属性。下表是只读类型的属性&#xff1a; DOM对象属性返 回 值FirstChild返回一个对象&#xff08;Object&#xff09;&#xff0c;表示第一个孩子节点&#xff08;child node&…

用O(1)的时间复杂度删除单链表中的某个节点

用O(1)的时间复杂度删除单链表中的某个节点 给定链表的头指针和一个结点指针&#xff0c;在O(1)时间删除该结点。链表结点的定义如下&#xff1a; struct ListNode {int m_nKey;ListNode* m_pNext; }; 函数的声明如下&#xff1a; void DeleteNode(ListNode* pListHea…

Django之序列化

关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户&#xff0c;特别的Ajax请求一般返回的为Json格式。 1、serializers from django.core import serializersret models.BookType.objects.all()data serializers.serialize("json", ret)2、json…

linux c语言内核函数,2014-1-5_linux内核学习(1)_C语言基础

1、结构体的初始化static struct file_operations fops {.read device_read,.write device_write,.open device_open,.release device_release};以前学习C语言的时候没有见过struct的这种初始化方式。这其实是C语言的新标准。Struct一共有三种初始化的方式&#xff1a;int…