多个tomcat服务,使用nginx负载均衡
同一个服务器配置,多个tomcat:
package org.xdemo.example.SpringActivemq.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @作者hailong
* @日期 2017-2-2上午10:54:11
* @描述 测试
*/
@Controller
@RequestMapping("/sessonShare")
public class SessionShareController {
/**
* 设定session值
* localhost:8082/SpringExample/sessonShare/set?message=3
*
* @param message
* @return String
*/
@RequestMapping("set")
@ResponseBody
public String set(@RequestParam("message")String message, HttpSession session,
HttpServletRequest request, HttpServletResponse response){
HttpSession session2 = request.getSession();
session2.setAttribute("username", message);
return "username=" + message;
}
/**
* 取得session值
* @param message
* @return String
*/
@RequestMapping("get")
@ResponseBody
public String get(HttpSession session,
HttpServletRequest request, HttpServletResponse response){
HttpSession session2 = request.getSession();
return session2.getAttribute("username") +"";
}
}
此时是不能共享session的。
解决方案一:
在nginx-config配置文件加入ip_hash
就可以共享了
解决方案二:
把session放jvm里,因为nginxB是对jvm直接交流的。所以在nginxB可以配置。
还要配置tomcat下setting.xml文件。
<Engine name="Catalina" defaultHost="localhost">
解决方案三:使用redis
http://blog.csdn.net/patrickyoung6625/article/details/45694157
把session数据保存到内存以外的一个统一的地方,例如Memcached/Redis等数据库中
关于redis在centos服务器上安装:http://572327713.iteye.com/admin/blogs/2346196
下载maven_jar去aliyun速度快:
http://maven.aliyun.com/nexus/#nexus-search;quick~spring session
redis desktop manager管理工具:
http://download.csdn.net/download/li295214001/9398955
spring配置参考:
http://www.cnblogs.com/qlong8807/p/5557271.html
spring.xml文件配置(非spring_mvc的xml文件):
<!-- 20170222 -->
<!-- redis spring-session -->
<!-- 使用spring session托管session,将session放入redis中 -->
<bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
<property name="maxInactiveIntervalInSeconds" value="600" />
</bean>
<!-- spring-data-redis -->
<bean
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<!-- redis 配置 -->
<property name="hostName" value="192.168.92.129"/>
<property name="port" value="6379" />
</bean>
web.xml配置:
<!-- 分布式Session共享Filter -->
<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>
pom.xml配置:
<!-- 集群中,session共享 ,可以完全脱离spring去用-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>
<!--redis客户端-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.2</version>
</dependency>
注意:jedis用2.8以上版本会出其他问题。
以上配置好后,放在不同tomcat下运行,放在同一个服务器tomcat端口不同,配置到nginx软负载,他们的session是共享的,可以下载redis桌面管理工具进行查看。
关于nginx配置:
/**
* 设定与取得session值
*
* @param message
* @return String
* @throws UnknownHostException
*/
@RequestMapping("gsSession")
@ResponseBody
public String gsSession(@RequestParam("message")String message, @RequestParam("action")String action, HttpSession session,
HttpServletRequest request, HttpServletResponse response) throws UnknownHostException{
HttpSession session2 = request.getSession();
String addr = InetAddress.getLocalHost().getHostAddress();
String hostName = InetAddress.getLocalHost().getHostName();
String message2 = "addr:"+ addr +" hostName: " + hostName;
if("set".equals(action)){
//session的name是username
session2.setAttribute("username", message);
System.out.println("set:" + session.getId());
} else if("get".equals(action)){
message2 =(String)session2.getAttribute("username");
System.out.println("get:" + session.getId());
}
return message2;
}
- 大小: 37.7 KB
- 大小: 19.9 KB
- 大小: 19.3 KB
- 大小: 22.6 KB
- 大小: 52.3 KB
- 大小: 35.2 KB
- 大小: 23.8 KB
- 大小: 25 KB
- 大小: 9.4 KB
- 大小: 14.1 KB
- 大小: 139 KB
- 大小: 56.2 KB
- 大小: 26.4 KB
- 大小: 67.9 KB
分享到:
相关推荐
Java Web中的Session跨域共享问题通常出现在分布式系统或者微服务架构中,多个Web服务器需要共享用户的登录状态。在传统的单体应用中,Session是存储在单一服务器上的,但随着技术的发展,应用程序往往被拆分为多个...
针对这一问题,我们可以利用特定的技术实现Session跨域共享,使得用户在访问多个相关联的二级域名时,依然能享受到无缝的体验。 本示例"Session跨域共享demo"是基于ASP.NET框架,适用于高版本的开发环境,如Visual ...
当涉及到用户会话(session)管理时,跨域共享session的能力对于构建统一的用户体验至关重要。本文将深入探讨如何通过更改配置文件来实现session的跨域共享,重点是通过调整PHP的配置参数来记住用户的登录状态。 ##...
然而,随着Web服务的复杂性和交互性增加,跨域资源共享(CORS)和会话(Session)共享成为开发者需要面对的重要问题。本文将详细讲解如何在Spring Boot应用中解决跨域session共享的问题,并探讨防止SQL注入的相关...
处理Session跨域问题通常涉及到多个网站或应用之间共享用户身份验证信息。Session是Web应用程序用来存储用户特定数据的一种机制,通常存储在服务器端,而Session ID通过Cookie在客户端与服务器之间传递。当用户在...
但是,为了提供更好的用户体验,特别是在单点登录(Single Sign-On, SSO)场景下,跨域共享session变得非常重要。 **一、跨域共享session原理** 1. **JSONP(JSON with Padding)**:JSONP是一种早期的跨域解决方案...
本项目"基于Cookie的Session跨域"则关注如何在分布式环境中解决Session的共享问题,通过Spring和Spring MVC框架来实现这一目标。 首先,我们来了解一下Cookie和Session的基本概念。Cookie是由服务器端发送到客户端...
本教程将详细讲解如何在Spring Boot项目中利用Redis来存储和共享Session,并解决Ajax跨域问题。 首先,我们需要理解Spring Boot中的Session管理。默认情况下,Spring Boot使用内存中的HttpSession来存储用户会话...
然而,当涉及到跨域时,`iframe` 遇到的问题之一就是无法正常访问父页面或被嵌入页面的`session`。这是因为浏览器的同源策略(Same-Origin Policy)限制了不同源之间的交互,包括`session`和`cookie`。 同源策略是...
首先,要解决session跨域问题,关键在于设置session.cookie_domain。这个设置项允许你指定session cookie的域名。在ThinkPHP框架中,根据框架的配置文件或入口文件进行设置,来确保session能够跨域使用。 在...
该文件可以通过代码实例,让你清楚的理解session和cookie的意思,当你明白了这点,你就可以设计出来单点登录功能,同一账号在同一时间只能登录一次功能。同时你可以通过ie、firefox去测试你对...在此共享,你值的拥有
在前后端集成测试的时候,就遇到了一些web安全相关的问题,cors跨域资源共享就是其中之一。 cors问题介绍 跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web...
然而,当涉及到跨域(即不同域名)的Session共享时,问题就变得稍微复杂了。本篇文章将深入探讨C#中如何实现不同域名之间的Session共享,以及这一功能的重要性和应用场景。 Session共享的主要目的是在多个网站或...
在PHP开发中,HTTP和HTTPS协议的跨域共享Session是一个常见的问题。由于浏览器的同源策略限制,不同协议(HTTP和HTTPS)被视为不同的源,因此默认情况下无法共享Session。为了解决这个问题,开发者通常需要手动处理...
本文将深入探讨如何使用PHP实现Cookie跨域和Session共享,以及处理相关问题的方法。 首先,让我们理解Cookie和Session的基本概念。Cookie是由服务器发送到客户端(浏览器)并由客户端保存的一小段数据,通常用于...
3. **Cookie管理**:要跨域共享Session,可能需要管理Set-Cookie响应头,确保Session ID能够正确地在各个域之间传递。 4. **JWT(JSON Web Tokens)**:为了解决跨域问题,开发者可能会选择使用JWT,它是一种轻量级...
该项目是一款基于Java和Shell语言的bboss session framework设计源码,专注于实现跨域集群节点之间的会话共享,并具备良好的会话监控和数据统计功能。该框架包含222个文件,包括164个Java源文件、14个XML配置文件、6...
【Spring-Session 实现Session共享】 在现代分布式系统中,由于多服务器、微服务架构的广泛应用,Session共享成为一个重要的需求。传统的HTTP Session机制在单服务器环境下工作良好,但当涉及到跨域、多服务器间的...
高并学习路线,maven、dubbo框架、nosql专题、消息中间件activeMQ、session跨域共享、自动化部署(png)