2、Spring Session-使用JDBC的HttpSession
来源:互联网 发布:vb中 是什么意思 编辑:程序博客网 时间:2024/05/19 03:17
4.3. 使用JDBC的HttpSession
在使用HttpSession的任何功能之前通过添加一个Servlet过滤器,就可以启用Spring Session,可以通过如下几种方式进行启用:
- 基于Java的配置
- 基于XML的配置
- 基于Spring Boot的配置
4.3.1. 基于Java配置JDBC
本节介绍基于Java配置的方式如何使用关系型数据库支持HttpSession。
HttpSession JDBC样例提供了一个可执行的样例,这个样例提供了如何基于Java配置整合Spring Session和HttpSession。你可以阅读以下的一些基础步骤,但是当您与自己的应用程序整合时,推荐遵循详细的HttpSession JDBC参考指南。
Spring Java配置
在添加完成必要的依赖之后,我们就可以创建我们自己的配置。Spring配置负责创建一个Servlet过滤器,这个过滤器通过一个使用Spring Session支持的实现去替换HttpSession。添加如下的Spring配置:
@EnableJdbcHttpSession public class Config { @Bean public EmbeddedDatabase dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScript("org/springframework/session/jdbc/schema-h2.sql").build(); } @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); }}
- @EnableJdbcHttpSession 注解创建了一个实现了Filter的名为springSessionRepositoryFilter的Bean。过滤器负责使用Spring Session支持的一个实现去替换HttpSession,这个实例中Spring Session由关系型数据库支持。
- 我们创建一个dataSource链接Spring Session和一个被嵌入的H2数据库实例。我们配置H2数据库使用包含在Spring Session中的SQL脚本创建一张数据表。
- 我们创建一个transactionManager去管理前面所创建的数据库的事务。
对于如何配置数据访问的一些相关概念的附加信息,请参考Spring Framework参考文档
Java Servlet容器初始化
我们的Spring配置文件已经创建了一个实现了Filter的名为springSessionRepositoryFilterBean。springSessionRepositoryFilter负责使用一个支持Spring Session的实现替换HttpSession。
为了让我们的Filter发挥它的魔力,Spring需要加载我们的Config类。最后我们需要确保每次请求Servlet容器都使用了springSessionRepositoryFilter。幸运的是,Spring Session提供了一个很有效的名为AbstractHttpSessionApplicationInitializer的类,使用这个类可以让加载Config类变得非常的容易。例子如下:
public class Initializer extends AbstractHttpSessionApplicationInitializer { public Initializer() { super(Config.class); }}
我们自己的类(Initializer )的命名我们并不关心,最重要的是要继承AbstractHttpSessionApplicationInitializer。
- 第一步是需要继承AbstractHttpSessionApplicationInitializer。这样可以确保名为springSessionRepositoryFilter 的Spring Bean被注册到Servlet容器中并为每次请求提供处理。
- AbstractHttpSessionApplicationInitializer也提供了一种机制可以非常容易的确保Spring加载Config。
4.3.2. 基于XML配置JDBC
本节介绍基于XML配置的方式如何使用关系型数据库支持HttpSession。
HttpSession JDBC XML样例提供了一个可执行的样例,这个样例提供了如何基于XML配置整合Spring Session和HttpSession。你可以阅读以下的一些基础步骤,但是当您与自己的应用程序整合时,推荐遵循详细的HttpSession JDBC XML参考指南。
Spring XML配置
添加必要的依赖之后,我们需要创建我们自己的Spring配置。Spring配置主要负责创建一个Spring Session支持的实现去替换HttpSession。Spring配置添加如下:
<context:annotation-config/><bean class="org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration"/><jdbc:embedded-database id="dataSource" database-name="testdb" type="H2"> <jdbc:script location="classpath:org/springframework/session/jdbc/schema-h2.sql"/></jdbc:embedded-database><bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <constructor-arg ref="dataSource"/></bean>
- 我们使用context:annotation-config和JdbcHttpSessionConfiguration主要是因为Spring Session没有提供XML命名空间的支持。这就创建了一个实现了Filter的名为springSessionRepositoryFilter 的SpringBean。此过滤器负责使用Spring Session支持的一个实现去替换HttpSession,这个实例中Spring Session由关系型数据库支持。
- 我们创建了一个dataSource用于连接Spring Session和一个嵌入的H2数据库实例。我们配置H2数据库使用包含在Spring Session中的SQL脚本创建一张数据表。
- 我们创建一个transactionManager去管理前面所创建的数据库的事务。
对于如何配置数据访问的一些相关概念的附加信息,请参考Spring Framework参考文档
XML Servlet容器初始化
Spring配置文件创建了一个实现Filter的名为springSessionRepositoryFilter的Bean。springSessionRepositoryFilter负责使用一个支持Spring Session的个性化实现替换HttpSession。
为了让我们的Filter发挥它的魔力,我们需要指示Spring加载我们的session.xml配置文件,我们按照如下配置指示Spring加载session.xml配置文件。
src/main/webapp/WEB-INF/web.xml(配置文件路径)<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/spring/*.xml </param-value></context-param><listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class></listener>
ContextLoaderListener读contextConfigLocation并抽出session.xml配置内容。
最后我们需要确保Servlet容器(如Tomcat)的每个请求都使用了springSessionRepositoryFilter,下面的这个代码片段为我们执行了最后一步:
src/main/webapp/WEB-INF/web.xml(配置文件路径)<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> <dispatcher>REQUEST</dispatcher> <dispatcher>ERROR</dispatcher></filter-mapping>
DelegatingFilterProxy会根据名称springSessionRepositoryFilter去寻找Bean并将其转化成Filter。对于调用DelegatingFilterProxy的每各请求,将调用springSessionRepositoryFilter。
4.3.3. 基于Spring Boot配置JDBC
本节主要介绍在使用Spring Boot的时候如何使用关系型数据库去支持HttpSession。
HttpSession JDBC Spring Boot样例提供了一个可执行的样例,这个样例提供了在使用Spring Boot的时候如何整合Spring Session和HttpSession。你可以阅读以下的一些基础步骤,但是当您与自己的应用程序整合时,推荐遵循详细的HttpSession JDBC Spring Boot参考指南。
Spring Boot配置
在添加完成一些必要的依赖之后,我们需要创建我们自己的Spring Boot配置文件。这里需要感谢first-class自动配置的支持,设置关系型数据库支持Spring Session是非常简单的,简单到只需要在你的application.properties配置文件中添加一条配置信息。
src/main/resources/application.properties(配置文件路径)spring.session.store-type=jdbc
在以上配置的引导之下,Spring Boot将会应用相当于手动添加@EnableJdbcHttpSession注解的配置。创建一个实现了Filter的名为springSessionRepositoryFilter的Bean(过滤器)。这个过滤器负责使用Spring Session支持的实现去替换HttpSession。
使用application.properties还可以进行更进一步的个性化。
server.session.timeout= # Session超时时间(秒)spring.session.jdbc.initializer.enabled= # 如果有需要,在启动时可创建必要的Session表。如果默认的表名已经配置或者个性化模式中已经配置,则自动启动。spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-@@platform@@.sql # 初始化数据库schema的SQL脚本目录。spring.session.jdbc.table-name=SPRING_SESSION # 用于存储会话的数据库表名。
更多信息,请参考Spring Boot参考文档的Spring Session部分。
配置DataSource
Spring Boot会自动创建DataSource 连接Spring Session和嵌入的H2数据库实例。在生产环境中,你需要确保更新你的配置到你的关系型数据库中。例如,你需要在application.properties包含下列内容:
spring.datasource.url=jdbc:postgresql://localhost:5432/myappspring.datasource.username=myappspring.datasource.password=secret
更多内容,请参考Spring Boot参考文档的配置数据源部分。
Servlet 容器初始化
Spring Boot配置文件创建了一个实现了Filter的名为springSessionRepositoryFilter 的Bean,springSessionRepositoryFilter负责使用一个支持Spring Session的个性化实现替换HttpSession。
为了让我们的Filter发挥它的魔力,Spring需要加载我们的Config类。最后我们需要确保每次请求Servlet容器都使用了springSessionRepositoryFilter。幸运的是Spring Boot已经帮我们把这些步骤全做了。
原文:https://docs.spring.io/spring-session/docs/2.0.0.M4/reference/html5/#httpsession-jdbc
- 2、Spring Session-使用JDBC的HttpSession
- 1、Spring Session-使用Redis的HttpSession
- 3、Spring Session-使用Hazelcast的HttpSession
- HttpSession和Hibernate的session
- 4、Spring Session-HttpSession整合工作原理
- 5、Spring Session-HttpSession & RESTful APIs
- HttpSession的简单使用
- HttpSession的使用
- Spring JDBC 的使用
- 使用Spring 的JDBC
- 使用Spring 的JDBC
- Spring jdbc 的使用
- spring jdbc的使用
- Spring JDBC 的使用
- HttpSession和jsp中session的区别
- HttpSession与Hibernate中Session的区别
- HttpSession接口 (session对象的用法)
- HttpSession与Hibernate中session的区别
- jQueryday10补充(动画系统复习 级联菜单 冒泡 默认 )
- 1.源代码的下载,编译和测试
- Eclipse对apk进行混淆加密
- 缓存使用案例分析
- 第三周项目一顺序表的基本运算(2)
- 2、Spring Session-使用JDBC的HttpSession
- 火狐浏览器如何导出https网站的公钥证书
- contraller层方法调用Service的方法一直报空指针异常
- udp丢包
- ZigBee笔记 01 搭建开发环境IAR安装
- 一个大三学生的学习生活之感
- Struts2乱码处理
- Kotlin常用操作符
- Python三角函数公式计算