1. 程式人生 > >關於spring session redis共享session的跨子域的處理

關於spring session redis共享session的跨子域的處理

安裝完redis, spring端只要下面這兩個bean配置上就可以用了

1 2 3 4 5 6 7 8 9 10 11 12 13 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"
/> <bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"> <property name="port" value="${redis_port}" /> <property name="hostName" value="${redis_url}" /> </bean>

官方示例都是零配置的寫法,畫風變的太大以至於在AbstractHttpSessionApplicationInitializer這裡浪費了 很久。其實用上面這種方式,是完全不需要再寫AbstractHttpSessionApplicationInitializer的,他們乾的是一件 事。

關於子域的坑

發現spring session在獲取sessionid時,在CookieHttpSessionStrategy中並沒有做跨子域的處理...

1 2 3 4 5 6 7 8 9 10 11 12 13 14 private Cookie createSessionCookie(HttpServletRequest request, Map<String, String> sessionIds) { Cookie sessionCookie = new Cookie(cookieName,""); if(isServlet3Plus) { sessionCookie.setHttpOnly(true); } sessionCookie.setSecure(request.isSecure()); sessionCookie.setPath(cookiePath(request)); // TODO set domain? ... private static String cookiePath(HttpServletRequest request) { return request.getContextPath() + "/"; }

其實這裡只要把cookiePath的返回值設定為統一的根路徑就能讓session id從根域獲取了,這樣同根下的所有web應用就可以輕鬆實現單點登入共享session了。既然找到了問題,解決就容易多了,下面列幾種解決方案:

  1. 改spring session原始碼,並重新打包
  2. 程式碼複用CookieHttpSessionStrategy,改cookiePath,並在spring注入時指定自己寫的這份Strategy

搭建spring session原始碼的開發環境太麻煩了,我用的方案2

1 2 3 private static String cookiePath(HttpServletRequest request) { return "/"; }

 並在spring redis中加入如下配置

1 2 3 4 5 6 7 8 <bean id="redisRepository" class="org.springframework.session.data.redis.RedisOperationsSessionRepository"> <constructor-arg ref="jedisConnectionFactory" /> </bean> <bean id="cookieHttpSessionStrategy" class

相關推薦

關於spring session redis共享session處理

安裝完redis, spring端只要下面這兩個bean配置上就可以用了 1 2 3 4 5 6 7 8 9 10 11 12 13 <?xml version="1.0" encoding="UTF-8"?> &

使用spring-session redis共享session

原因 之前有一篇分享過session共享的方案,redis共享session確實有很多好處,但是在原有的工程上面新增去修改session放到redis裡面去,確實有一定的改動量。但是我們可以通過sp

[PHP配置]新增session共享配置

名詞:IP,主域,子域 新增session跨子域共享配置,在session_start()之前 ini_set('session.cookie_path', '/'); ini_set('sessio

spring boot + session+redis解決session共享問題

tar session tail ref href spring pan dream spa 自己沒有親自試過,不過看了下這個例子感覺靠譜,以後做了測試,在加以說明。spring boot + session+redis解決session共享問題

Spring-Session+Redis實現session共享

1、新增依賴 <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId>

使用Spring-Session Redis實現Session共享

知其然,還要知其所以然 ! 本篇介紹Spring-Session的整個實現的原理。以及對核心的原始碼進行簡單的介紹! 實現原理介紹 實現原理這裡簡單說明描述: 就是當Web伺服器接收到http請求後,當請求進入對應的Filter進行過濾,將原本需要由web伺服器

Nginx+Tomcat搭建叢集,Spring Session+Redis實現Session共享

小夥伴們好久不見!最近略忙,部落格寫的有點少,嗯,要加把勁。OK,今天給大家帶來一個JavaWeb中常用的架構搭建,即Nginx+Tomcat搭建服務叢集,然後通過Spring Session+Redis實現Session共享。 閱讀本文需要有如下知識點:

Spring Session + Redis 實現session共享

這裡主要介紹一下基於xml的配置:1. 在pom.xml檔案中引入所需依賴<!-- spring-session begin--> <dependency>

單點登入實現(spring session+redis完成session共享

v一、前言   專案中用到的SSO,使用開源框架cas做的。簡單的瞭解了一下cas,並學習了一下 ,有興趣的同學也可以學習一下,寫個demo玩一玩。 v二、工程結構      我模擬了 sso的客戶端和sso的服務端, sso-core中主要是一些sso需要的過濾器和工具類

spring,shiro,redis實現session共享

用到的redis jar如下 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <

springboot 整合 redis 共享Session-spring-session-data-redis

ssi nco template idl end timeunit 超時 超時時間 database 參考:https://www.cnblogs.com/ityouknow/p/5748830.html 如何使用 1、引入 spring-boot-starte

spring+shiro+redis實現session共享

利用spring的RedisTemplate實現session的存取,先配置applicationContext-shiro.xml <!-- 會話管理器 --> <bean id="sessionManager" class=

spring boot session Redis共享方案和一些疑惑的解決

    1:首先編寫配置類,告訴springboot我們要使用Redis進行session共享:     2:springboot需要引入的jar:  spring-session-data-re

Redis共享Session原理及示例

Redis共享session的作用 微服務自身可以保持無狀態,應用例項數量的多少不會影響使用者登入狀態; 可實現單點登入的踢出功能,如可以讓上次異地登入的使用者下線; session在多個服務或伺服器間共享,實現多站點單點登入(參考SSO服務) Redi

Session分散式共享 = Session + Redis + Nginx

一、Session 1、Session 介紹       我相信,搞Web開發的對Session一定再熟悉不過了,所以我就簡單的介紹一下。       Session:在計算機中,尤其

Spring Session + Redis 實現Session的分散式儲存

1 Redis的安裝及其基本使用 1.1 環境說明 CentOS7.3 Redis-3.2.10 1.2 Redis下載 [[email protected] Downloads]# wget http://download.

利用spring session解決共享Session問題

1.共享Session問題 HttpSession是通過Servlet容器建立和管理的,像Tomcat/Jetty都是儲存在記憶體中的。而如果我們把web伺服器搭建成分散式的叢集,然後利用LVS或Nginx做負載均衡,那麼來自同一使用者的Http請求將有可能被分發到兩個不

shiro redis共享session不更新的問題

整合了session共享,但是存在session不更新的問題 可以清楚的看到,session的剩餘時間並沒有重新整理,而是一直在減少。      解決Shiro頻繁訪問Redis讀取和更新session https://blog.csdn.ne

Struts2配置redis共享session啟動報錯,求大神指點.配置和報錯資訊如下:

加上標出配置,啟動則報錯,去除則正常啟動.         <!-- redis配置 -->     <!-- redis連線池 -->       <bean id="jedisPoolConfig" class="redis.client

Linux(CentOS)下Nginx+Tomcat叢集+Redis共享Session搭建

Linux(CentOS7)下Nginx+Tomcat叢集+Redis共享Session搭建版本:CentOS7+Nginx1.12.2+Tomcat7.085+Redis3.2.1+Java71.    下載安裝Nginx(直接解壓就行)a)    安裝Nginxb)修改c