Insight spring-session 配置(整合方式)
spring-session 專案實現了redis、jdbc、gemfire 版本的分散式httpsession。
整合方式分為註解、xml配置。
原理就是配置filter,代理原有的httpsession的生成、獲取、銷燬的實現。
servlet、Spring整合方式-
org.springframework.web.context.support.WebApplicationContextUtils#getWebApplicationContext(javax.servlet.ServletContext)
Filter實現類 org.springframework.web.filter.DelegatingFilterProxySpring-Session實現類 springSessionRepositoryFilter
那麼,這個filter是如何工作的?
從DelegatingFilterProxy入口,WebApplicationContext.getBean() 的方式獲取到我們需要的x-httpsession實現。
/**
* 此處的 delegateToUse就是分散式httpsession的bean
* doFilter過程中進行初始化check (漂亮的程式碼隨處可見啊)
* 然後將分散式httpsession加入請求的filterChain, 達到httpsession代理的目的
**/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) {
// Lazily initialize the delegate if necessary.
Filter delegateToUse = this.delegate;
if (delegateToUse == null) {
synchronized (this.delegateMonitor) {
if (this.delegate == null) {
WebApplicationContext wac = findWebApplicationContext();
if (wac == null) {
throw new IllegalStateException("No WebApplicationContext found: " + "no ContextLoaderListener or DispatcherServlet registered?");
}
this.delegate = initDelegate(wac);
}
delegateToUse = this.delegate;
}
}
// Let the delegate perform the actual doFilter operation.
invokeDelegate(delegateToUse, request, response, filterChain);
}
然後,需要的bean("springSessionRepositoryFilter") 是何時構造的?
看另外一部分配置,註解@EnableSpringHttpSession 或者xml宣告(SpringHttpSessionConfiguration)。
a. SessionRepositoryFilter 由SpringHttpSessionConfiguration 構造,意味著我們啟用spring-session。
b. httpSession的實現方式(Mongo、Jdbc、Redis...)基於此處SessionRepositoryFilter的構造入參,即sessionRepository
c. 配置spring容器中使用哪種SessionRepository,同樣,通過兩種方式: xml宣告(RedisHttpSessionConfiguration) 或者 @EnableRedisHttpSession、@EnableJdbcHttpSession...
/**
* web.xml 配置的httpsession bean 來自此處
* 構造spring-session filter 需要真正的儲存物件 redis/jdbc/gemfire
**/
@Bean
public SessionRepositoryFilter<? extends ExpiringSession> springSessionRepositoryFilter(SessionRepository sessionRepository) {
SessionRepositoryFilter sessionRepositoryFilter = new SessionRepositoryFilter(sessionRepository);
sessionRepositoryFilter.setServletContext(this.servletContext);
sessionRepositoryFilter.setHttpSessionStrategy(this.httpSessionStrategy);
return sessionRepositoryFilter;
}
備註:
1、java web獲取spring bean 的方案可以直接配置DelegatingFilterProxy即可。靈活使用spring 的另外一種解決思路。
2、如上xml宣告方式啟用spring-session,只需要配置RedisHttpSessionConfiguration即可,該類繼承自SpringHttpSessionConfiguration。
3、目前支援的分散式httpsession 包括:
JdbcHttpSessionConfiguration ,
RedisHttpSessionConfiguration ,
HazelcastHttpSessionConfiguration ,
GemFireHttpSessionConfiguration ,
MongoHttpSessionConfiguration
相關文章
- spring-boot 整合 spring-sessionSpringbootSession
- Spring-Cloud整合Spring-Session的注意點SpringCloudSession
- springboot整合kafka配置方式Spring BootKafka
- source insight4配置
- spring-sessionSpringSession
- SpringBoot2.x 整合Spring-Session實現Session共享Spring BootSession
- 配置Source Insight閱讀PHP專案的程式碼PHP
- SSH 框架整合(maven版本 xml配置方式 連線池c3p0)框架MavenXML
- Spring整合Mybatis方式二 - SqlSessionTemplateSpringMyBatisSQLSession
- SSH框架整合配置所需JAR包(SSH整合)框架JAR
- Insight Windows AzureWindows
- Activiti配置整合到nacos
- Source Insight:使用Source Insight檢視C/C++原始碼C++原始碼
- source insight使用教程
- Insight spring RestTemplateSpringREST
- Swagger 2.0 整合配置Swagger
- 持續整合配置之Nuget
- SSM框架整合(配置檔案)SSM框架
- Spring 整合 Memcached 配置(一)Spring
- Windows Azure Pack整合配置SPFWindows
- Jenkins持續整合配置Jenkins
- CAS學習筆記三:SpringBoot自動配置與手動配置過濾器方式整合CAS客戶端筆記Spring Boot過濾器客戶端
- Spring整合Mybatis方式一 - 常規整合 - 註冊對映器SpringMyBatis
- 給Source Insight做個外掛之一--發現Source Insight
- CAS學習筆記五:SpringBoot自動/手動配置方式整合CAS單點登出筆記Spring Boot
- Android 混合Flutter之產物整合方式AndroidFlutter
- Native 工程整合Flutter 的兩種方式Flutter
- Android 混合Flutter之原始碼整合方式AndroidFlutter原始碼
- ssm框架整合redis(demo)---通過cache方式SSM框架Redis
- FreeBSD 整合Unix和Windows的方式(轉)Windows
- Hive metastore三種配置方式HiveAST
- spring 配置sqlite的方式SpringSQLite
- SpringBoot 整合 Apollo 配置中心Spring Boot
- Spring MVC整合redis的配置SpringMVCRedis
- SpringBoot整合Apollo配置中心Spring Boot
- 使用xml檔案配置SSM整合XMLSSM
- Spring整合Quartz案例使用RAM儲存方式Springquartz
- Spring整合Quartz案例使用JDBC儲存方式SpringquartzJDBC