`

spring session实现session统一管理(jdbc实现)

 
阅读更多

最近在看一些关于spring session 的知识,特做一个笔记记录一下。

在项目中经常会遇到这么一种情况,同一个web项目有时需要部署多份,然后使用nginx实现负载均衡,那么遇到的问题就是,部署多份之后,如何实现一个session的共享功能。此时就可以使用spring session来实现。

 参考网址:http://docs.spring.io/spring-session/docs/current/reference/html5/guides/httpsession-jdbc-xml.html

1.引入spring session 的jar包依赖。

 

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.huan.spring</groupId>
		<artifactId>spring-session-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>02_spring_session_jdbc</artifactId>
	<packaging>war</packaging>
	<name>02_spring_session_jdbc Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.session</groupId>
			<artifactId>spring-session-jdbc</artifactId>
			<type>pom</type>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
		</dependency>
		<dependency>
			<groupId>com.oracle</groupId>
			<artifactId>ojdbc14</artifactId>
		</dependency>
	</dependencies>
	<build>
		<finalName>02_spring_session_jdbc</finalName>
	</build>
</project>

   spring 的版本:4.1.5.RELEASE spring session-jdbc的版本:1.2.0.RELEASE

 

二、配置spring session的配置文件

<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">
	<context:annotation-config />
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		init-method="init" destroy-method="close">
		<!-- 基本属性driverClassName、 url、user、password -->
		<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
		<property name="username" value="scott" />
		<property name="password" value="tiger" />
	</bean>
	<bean
		class="org.springframework.session.jdbc.config.annotation.web.http.JdbcHttpSessionConfiguration" />
	<bean
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<constructor-arg ref="dataSource" />
	</bean>
</beans>

 三、配置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">
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:spring-session.xml
		</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<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>
</web-app>

 四、编写测试代码

1.登录界面(login.jsp)

<body>
	<form action="LoginServlet" method="post">
		<table>
			<tbody>
				<tr>
					<td>用户名:</td>
					<td><input name="loginName" required="required" /></td>
				</tr>
				<tr>
					<td>密码:</td>
					<td><input type="password" name="password" required="required"></td>
				</tr>
			</tbody>
			<tfoot>
				<tr>
					<td colspan="2"><input type="submit" value="登录"></td>
				</tr>
			</tfoot>
		</table>
	</form>
</body>

 2.后台的逻辑处理

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = -8455306719565291102L;
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		HttpServletRequest request = (HttpServletRequest) req;
		HttpServletResponse response = (HttpServletResponse) resp;
		request.setCharacterEncoding("UTF-8");
		String loginName = request.getParameter("loginName");
		String password = request.getParameter("password");
		request.getSession().setAttribute("login", true);
		request.getSession().setAttribute(loginName, password);
		response.sendRedirect(request.getContextPath() + "/show.jsp");
	}
}

 3.展示界面(show.jsp ---> 没有登录访问次界面,直接跳到登录界面)

<body>
	输出session中的值:
	<%
	if (request.getSession().getAttribute("login") == null) {
		response.sendRedirect(request.getContextPath() + "/login.jsp");
	}
%>
	<%
		Enumeration<String> enumeration = request.getSession().getAttributeNames();
		while (enumeration.hasMoreElements()) {
			String key = enumeration.nextElement();
			Object value = request.getSession().getAttribute(key);
			out.println(key + " --- " + value);
		}
	%>
	<br>
	-----------------
	jsessionId:<%=request.getSession().getId() %>
	----------------------
	<%=request.getRemoteAddr()%>
	<%=request.getRemotePort()%>
	<%=request.getRemoteHost()%>
	<%=request.getRemoteUser()%>
	<%=request.getHeader("X-Real-IP")%>
	<%=request.getHeader("Host")%>
	<%=request.getHeader("X-Forwarded-For")%>
	<%=request.getLocalPort()%>
</body>

 

4.nginx的简单配置 --- 启动ngnix

 

5.分别启动2个tomcat容器


6.修改其中一个tomcat容器中的show.jsp的值,随便加一个内容,以示区分。

 

7.页面上访问



 
 8.可以到oracle数据区中进行查询,用到的表

select * from SPRING_SESSION t;
select * from SPRING_SESSION_ATTRIBUTES t;

 9.用到的sql语句所在的jar包目录



 

  • 大小: 12.7 KB
  • 大小: 9 KB
  • 大小: 48.9 KB
  • 大小: 35.1 KB
分享到:
评论

相关推荐

    spring session实现分布式会话管理

    Spring Session 的核心理念是将传统的 HTTP Session 数据存储和管理从应用服务器迁移到更灵活、可扩展的数据存储层,如 Redis、MongoDB 或者 JDBC 数据库。这样可以解决在微服务、云环境或者负载均衡场景下,保持...

    SpringSession+Redis实现Session共享案例

    SpringSession结合Redis实现Session共享是Web开发中一种常见的解决方案,特别是在分布式系统中,为了保持用户在不同服务器之间访问时的会话一致性。本案例旨在教你如何配置和使用SpringSession与Redis来达到这一目的...

    spring-session

    Spring Session 是一个开源项目,由 Pivotal Software 开发,旨在提供统一的会话管理解决方案。这个项目的主要目的是解决在分布式环境中如何有效地管理和共享 HTTP 会话的问题。在传统的单体应用中,session 通常...

    spring-session例子工程

    Spring Session 提供了一种统一管理和共享 Session 的解决方案,它可以将 Session 数据持久化到多种后端存储,如 Redis、MongoDB 或者 JDBC 数据库,这样即使用户在不同的服务器之间跳转,也能保持会话的一致性。...

    spring-session-core-2.0.5.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-session-core-2.0.5.RELEASE.jar; 赠送原API文档:spring-session-core-2.0.5.RELEASE-javadoc.jar; 赠送源代码:spring-session-core-2.0.5.RELEASE-sources.jar; 赠送Maven依赖信息文件:...

    springsession-jdbc:示例应用程序展示了如何使用JDBC配置Spring Session

    总之,"springsession-jdbc" 示例应用程序是一个很好的起点,用于了解如何在 Spring 应用中利用 JDBC 来管理和持久化用户会话,这对于构建可伸缩、高可用的分布式系统至关重要。通过深入研究提供的源代码,开发者...

    Spring Session 2 中文 参考手册 中文文档

    Spring Session是一个为Java平台提供会话管理的库,它提供了一个统一的API和实现用于管理用户会话信息,其核心目的是解决应用程序在分布式系统中处理HTTP会话时可能遇到的常见问题,尤其是在实现集群环境下的会话...

    基于java config的springSecurity 六 集成spring session

    参考资料: http://docs.spring.io/spring-session/docs/current-SNAPSHOT/reference/html5/guides/security.html http://blog.csdn.net/xiejx618/article/details/43059683

    最简单的用户登录与注册系统 spring mvc spring jdbc

    这个项目是一个基于Spring MVC和Spring JDBC的简单用户管理应用,旨在帮助初学者理解如何在实际开发中实现用户登录、注册以及信息修改功能。Spring MVC是Spring框架的一个模块,主要用于构建Web应用程序,而Spring ...

    spring-session+spring+redis的依赖包

    总之,这个压缩包提供的"spring-session+spring+redis"组合,是Java Web开发中实现高可用分布式会话管理的一种常见解决方案。通过使用Redis作为存储,结合Spring Session的便捷性和Jedis的高效访问,可以在复杂环境...

    spring session with jdbc

    spring-boot 集成h2数据库实现session以及数据缓存

    spring-session+spring的依赖包

    - Spring Session支持多种存储机制,包括Redis、JDBC、MongoDB等,本项目选择了Redis,因为Redis具有高性能、低延迟的特性,非常适合做数据缓存。 2. **Redis Cluster**: - Redis是内存数据库,用于高速数据访问...

    Spring-JDBC-Session:使用JDBC将Spring会话存储在数据库中的Spring Boot应用程序

    Spring-JDBC会话使用JDBC将Spring会话存储在数据库中的Spring Boot应用程序

    spring-session-1.3.1.RELEASE.zip

    1. **集成支持**:Spring Session 支持多种存储后端,包括 Redis、MongoDB、JDBC、Hazelcast 和 Infinispan。1.3.1.RELEASE 版本可能对这些后端进行了优化,提高了数据读写速度和稳定性。例如,对于 Redis 集成,...

    spring-session简介及实现原理源码分析

    Spring-Session 实现原理源码分析 Spring-Session 是 Spring旗下的一个项目,旨在解决 Session 管理问题。它可以轻松快捷地集成到我们的应用程序中,并提供了多种存储 Session 的方式。下面是 Spring-Session 的...

    详解SpringBoot2 使用Spring Session集群

    使用 Spring Session 可以轻松地实现集群,管理会话变得更加灵活和高效。本文详细介绍了如何使用 Spring Session 在 SpringBoot2 中实现集群,希望能够帮助读者更好地理解 Spring Session 并实践之。

    Springsession nginx反向代理集成过程

    springsession 是一个灵活的会话管理解决方案,可以与nginx反向代理集成,实现分布式session共享。本文将详细介绍springsession nginx反向代理集成过程,包括springsession配置、分布式项目的session问题、主流的...

    SSM项目集成shiro搭建session共享

    在这个项目中,我们使用了SpringMvc4.3、Spring4.3、Mybatis3.4作为基础框架,Shiro1.4作为安全框架,Log4j2进行日志管理,FreeMarker2.3作为模板引擎,并结合Shiro-Redis2.9来实现session的共享存储。以下是对这些...

    spring实现的网上书店

    2. **会话管理**:Spring Session提供了一种跨服务器共享session的解决方案,这对于多服务器部署的大型应用非常重要。 3. **购物车**:这通常涉及到状态管理,用户添加商品到购物车,修改数量,或者移除商品,这些...

    网上购物车struts+spring+hibernate实现

    - **AOP(面向切面编程)**:在购物车系统中,Spring 的AOP可以用于实现事务管理,确保在添加商品、修改购物车或支付时的数据库操作一致性。 - **服务层**:Spring 可以用来创建业务服务接口及其实现,例如`...

Global site tag (gtag.js) - Google Analytics