javascript
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共享
總結
以上是生活随笔為你收集整理的oracle不同session共享变量,SpringMVC使用oracle配置session共享的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里巴巴矢量图标 iconfont 下载
- 下一篇: java json转excel_JSON