久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

基于Spring

170次閱讀
沒有評論

共計 6424 個字符,預計需要花費 17 分鐘才能閱讀完成。

今天就跟大家聊聊有關基于 Spring-Session 如何實現會話共享,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

前段時間,在對項目權限框架調整的時候(SpringSecurity 改成 Shiro),集成了 SpringSession 小插件。

  由于現今本項目某些特性,暫時無法進行分布式部署,所以對 SpringSession 并沒有進行深入測試以及生產上部署應用,這里只是記錄整合的過程以及一些心得。

  網上也看到一些同學說 SpringSession 存在一些坑,比如無法實現跨域 Session 共享,然后通過修改其 Cookie 生產策略可以進行解決等,因此在生產使用之前,還需進行充分的測試。

學習 @Configuration、@Bean 兩個 Spring 注解:

Spring 中為了減少 xml 中配置,引入了 @Configuration 和 @Bean 注解類。@Configuration 注解的類,等價于 XML 中配置 beans,表明這個類是 beans 定義的源;@Bean 注解的方法等價于 XML 中配置的 bean,該方法創建出的實例由 Ioc 容器管理。

 SpringSession 核心的配置類為 SpringHttpSessionConfiguration(框架也默認提供了 Redis、Mongo、Jdbc 等實現,本項目使用 RedisHttpSessionConfiguration)。RedisHttpSessionConfiguration 類中最重要的兩個操作就是創建 springSessionRepositoryFilter 以及 sessionRedisTemplate。在創建 sessionRedisTemplate 時框架會依賴解析 RedisConnectionFactory,所以在 Spring 配置中我們需要定義 RedisConnectionFactory;springSessionRepositoryFilter 是 SpringSession 的核心,也是 web.xml 中 Filter 代理,整個 Session 的獲取以及提交都在其里實現。

以下是整個配置的過程:

1、applicationContext-session.xml 配置如下:

?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:mvc= http://www.springframework.org/schema/mvc 
  xmlns:context= http://www.springframework.org/schema/context 
  xmlns:util= http://www.springframework.org/schema/util 
  xmlns:aop= http://www.springframework.org/schema/aop 
  xmlns:tx= http://www.springframework.org/schema/tx 
  xsi:schemaLocation= http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd 
 http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd 
 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd 
 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd 
 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd  default-lazy-init= true 
 bean id= jedisPoolConfig   >

2、屬性文件 config.properties 配置如下:

## redis pool config
redis.pool.maxTotal=100
redis.pool.maxIdle=20
redis.pool.minIdle=10
redis.pool.blockWhenExhausted=true
redis.pool.maxWaitMillis=3000
redis.pool.testOnBorrow=false
redis.pool.testOnReturn=false
redis.pool.testWhileIdle=true
redis.pool.minEvictableIdleTimeMillis=60000
redis.pool.timeBetweenEvictionRunsMillis=30000
redis.pool.numTestsPerEvictionRun=-1
# redis config
redis.host=192.168.0.123
redis.port=6379
redis.password=admin-123456
redis.database=0
redis.timeout=3600

3、web.xml 配置如下:

?xml version= 1.0  encoding= UTF-8 ? 
 web-app xmlns:xsi= http://www.w3.org/2001/XMLSchema-instance 
 xmlns= http://java.sun.com/xml/ns/javaee 
 xsi:schemaLocation= http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd 
 id= WebApp_ID  version= 2.5 
 display-name editor /display-name 
 context-param 
 param-name contextConfigLocation /param-name 
 param-value classpath:spring/applicationContext.xml,classpath:spring/applicationContext-security.xml /param-value 
 /context-param 
 listener  
 listener-class org.jasig.cas.client.session.SingleSignOutHttpSessionListener /listener-class  
 /listener 
 listener 
 listener-class org.springframework.web.context.ContextLoaderListener /listener-class 
 /listener 
 listener 
 listener-class org.springframework.web.util.IntrospectorCleanupListener /listener-class 
 /listener 
 listener 
 listener-class org.springframework.web.context.request.RequestContextListener /listener-class 
 /listener 
 !-- CAS  單點退出  -- 
 filter 
 filter-name CAS Single Sign Out Filter /filter-name 
 filter-class com.wuzb.pw.common.shiro.CustomSingleSignOutFilter /filter-class 
 /filter 
 filter-mapping 
 filter-name CAS Single Sign Out Filter /filter-name 
 url-pattern /* /url-pattern 
 /filter-mapping 
 !-- POST 亂碼處理  -- 
 filter 
 filter-name CharacterEncodingFilter /filter-name 
 filter-class org.springframework.web.filter.CharacterEncodingFilter /filter-class 
 init-param 
 param-name encoding /param-name 
 param-value utf-8 /param-value 
 /init-param 
 init-param 
 param-name forceEncoding /param-name 
 param-value true /param-value 
 /init-param 
 /filter 
 filter-mapping 
 filter-name CharacterEncodingFilter /filter-name 
 url-pattern /* /url-pattern 
 /filter-mapping 
 filter 
 filter-name shiroFilter /filter-name 
 filter-class org.springframework.web.filter.DelegatingFilterProxy /filter-class 
 async-supported true /async-supported 
 init-param 
 param-name targetFilterLifecycle /param-name 
 param-value true /param-value 
 /init-param 
 /filter 
 filter-mapping 
 filter-name shiroFilter /filter-name 
 url-pattern /* /url-pattern 
 /filter-mapping 
 filter 
 filter-name springSessionRepositoryFilter /filter-name 
 filter-class org.springframework.web.filter.DelegatingFilterProxy /filter-class 
 /filter 
 filter-mapping 
 filter-name springSessionRepositoryFilter /filter-name 
 url-pattern /* /url-pattern 
 /filter-mapping  
 servlet 
 servlet-name dispatcherServlet /servlet-name 
 servlet-class org.springframework.web.servlet.DispatcherServlet /servlet-class 
 init-param 
 param-name contextConfigLocation /param-name 
 param-value classpath:spring/applicationContext-mvc.xml /param-value 
 /init-param 
 /servlet 
 servlet-mapping 
 servlet-name dispatcherServlet /servlet-name 
 url-pattern / /url-pattern 
 /servlet-mapping 
 welcome-file-list 
 welcome-file /welcome-file 
 /welcome-file-list 
 /web-app

項目中使用的 Spring 版本 4.1.6.RELEASE。其中集成 Spring Session 所需的 Jar 如下:

spring-data-commons-1.12.3.RELEASE.jar
spring-data-keyvalue-1.1.3.RELEASE.jar
spring-data-redis-1.7.1.RELEASE.jar
spring-session-1.2.2.RELEASE.jar
spring-session-data-redis-1.2.2.RELEASE.jar
jedis-2.8.1.jar

需要注意的點:

spring-session-data-redis-1.2.2.RELEASE.jar 默認依賴 spring-data-redis-1.7.1.RELEASE.jar,

若使用 spring-data-redis-1.7.3.RELEASE 或者更高版本的會出現如下異常:

Caused by: java.lang.NoSuchMethodError: org.springframework.core.serializer.support.DeserializingConverter. init (Ljava/lang/ClassLoader;)V
 at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer. init (JdkSerializationRedisSerializer.java:53)
 at org.springframework.data.redis.core.RedisTemplate.afterPropertiesSet(RedisTemplate.java:119)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
 ... 49 more

  在處理分布式 Session 的案例中,有很多種解決方案。例如基于 Tomcat 中間件(TomcatRedisSessionManager)基于服務器基本做會話共享(局限大);基于 SpringSession 插件實現 Session 共享;若使用 Shiro 權限框架還可以自己實現 SessionDao 來實現 Session 共享。這些在后續時間里,再繼續探索。

看完上述內容,你們對基于 Spring-Session 如何實現會話共享有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-17發表,共計6424字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 浙江省| 长泰县| 彭水| 内乡县| 涞源县| 加查县| 汕尾市| 洪雅县| 常山县| 治多县| 江川县| 万年县| 大荔县| 彰武县| 尼玛县| 崇文区| 桃源县| 隆德县| 大城县| 云安县| 织金县| 泰兴市| 玉环县| 浠水县| 盈江县| 古浪县| 台安县| 聊城市| 宜春市| 延寿县| 大庆市| 虎林市| 麦盖提县| 乌兰察布市| 临潭县| 南投县| 江孜县| 广河县| 普兰店市| 泰兴市| 陆良县|