- 浏览: 94734 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (209)
- http://docs.jpush.io/server/java_sdk/ (1)
- SpingMVC ModelAndView (1)
- Model (1)
- Control以及参数传递 (1)
- https://www.alipay.com/ (1)
- 检查指定的字符串列表是否不为空。 (1)
- 转自http://my.oschina.net/rpgmakervx/blog/505434 (1)
- 压缩js (1)
- 含包含 字母数字校验 (1)
- 判断浏览器是ie (1)
- fixbox (0)
- 转自http://www.cnblogs.com/lanzi/archive/2010/10/26/1861338.html (1)
- http://dl2.iteye.com/upload/attachment/0113/2406/afbd8d53-dcad-3afc-8d78-41c1591 (0)
- IDEA (0)
- maven搭建 (0)
- http://www.jeasyuicn.com/api/docTtml/index.htm (1)
- 给tomcat添加运行内存: (1)
- JPUSH推送 (1)
- requestScope (0)
- oracle中plsql安装client10连接数据库 (1)
- 不需要安装oracle11g (1)
- tuikuan (1)
- http://www.hjxmall.com/index.php (1)
- java (1)
- 参考 (1)
- xml签名验签模拟程序 (1)
- 技术网站收集分享 (1)
- Java NIO提供了与标准IO不同的IO工作方式 ------来源于 http://www.iteye.com/magazines/132-Java-NIO (1)
- oracle表查询语句优化 (0)
- oracle (5)
- a (1)
- TenpayHttpClient (2)
- mongodb (1)
- http://www.qcloud.com/product/cmongo.html?utm_source=pcsem1&utm_medium=bdgj46&utm_campaign=baidu (1)
- SpringMVC整合MongoDB开发 (0)
- SpringMVC整合MongoDB开发 https://www.mongodb.org (1)
- Java 语言中常见问题总结 (1)
- 数据库SQL优化大总结 (1)
- 拦截器与过滤器的区别 (1)
- Struts2中拦截器与过滤器的区别及执行顺序 (1)
- Spring声明式事务管理与配置 (0)
- oracle OPERTION (1)
- java 高并发多线程开发 (1)
- Collection 与 map 接口相关集合 (1)
- 多线程开发实践 (1)
- JVM调优总结 转自 http://www.importnew.com/18694.html (1)
- redis 五种数据类型的使用场景 转自于 http://blog.csdn.net/gaogaoshan/article/details/41039581 (1)
- HttpWatch http基础 来自于http://blog.csdn.net/gaogaoshan/article/details/21237555 (1)
- maven 远程仓库 http://blog.csdn.net/gaogaoshan/article/details/40266779 (1)
- 生成Webservice客户端的4中方法 http://blog.csdn.net/gaogaoshan/article/details/8980775 (1)
- http://fgh2011.iteye.com/blog/1564283 (1)
- sleep和wait有什么区别 http://xiaowei2002.iteye.com/blog/2174188 (1)
- JDK中常用包及其类 常见的几种RuntimeException (1)
- Java的运行原理 (1)
- mybatis缓存的使用及理解 http://my.oschina.net/dxqr/blog/123163 (1)
- 软件架构设计分析 (1)
- redis技术总结 (3)
- java面试总结知识点 (1)
- ZooKeeper技术 (1)
- Hadoop (1)
- sso单点登录 (1)
- SpringIOC (1)
- 书签ssssssssssssssssssssss (1)
- spring事务的隔离级别 http://www.cnblogs.com/yangy608/archive/2011/06/29/2093478.html (1)
- 秒杀系统架构分析与实战 http://www.importnew.com/18920.html (1)
- oracle 连接plsql配置 (1)
- maven工程集成springmvc http://blog.csdn.net/fox_lht/article/details/16952683 (1)
- java类序列化与反序列化版本唯一号serialVersionUID (1)
- spring注解用法总结 (1)
- eclipse导入maven项目找不到资源文件方法 (1)
- dubbo (0)
- socket 网络编程 服务器与客户端 编程 (1)
- Thread与Runnable实现线程利用线程插队实现求和操作 (1)
- 生产者与消费者模式 (1)
- JAXB注解 java 关于xml的注解,自动生成xml文件 - @XML*** (1)
- xml 与JAVAbean转换 (1)
- MAP (2)
- decimalToString (1)
- 反编译插件 (0)
- 反编译插件 https://sourceforge.net/projects/jadclipse/?source=typ_redirect (1)
- AWX (1)
- 官网地址Dinp (1)
- public interface ExecutorService extends Executor (1)
- MAIN (1)
- 转自于 http://blog.csdn.net/lufeng20/article/details/24314381 (1)
- JaxbUtil (1)
- HttpXmlClient (0)
- Http post 请求 (1)
- URLDecoder (1)
- spdb (0)
- 订单号生成规则 (1)
- 距离0点毫秒数 (1)
- MyBatis存储过程调用java (1)
- Banks (1)
- 学习网址 (1)
- hots配置oracle数据库配置修改 (1)
- 支付宝文档 (1)
- Jadclipse (1)
- filter (0)
- Filter过滤器 (1)
- 工具类 fixbox (1)
- java quartz (0)
- java quartz 实现定时任务,每个礼拜一到礼拜五定时执行 (1)
- Thread (4)
- getResourceAsStream (1)
- BigData (1)
- 开源架构 (17)
- 架构 (0)
- 文件操作 (2)
- tools (20)
- 测试工具 (1)
- vm (1)
- mq (1)
- blog (1)
- 开源架构搭建技术 (6)
- JAVA细节技术点总结 (1)
- 优化技术 (1)
- LINUX命令使用 (1)
- spring (2)
- 大数据 (1)
- struts2 (1)
- python (1)
- pay (1)
- linux (1)
- 压力测试 (1)
- 代码检查插件 (1)
- 游戏端开发 (1)
- 微信开发相关 (1)
- 搜索引擎 (1)
- 网络技术 (1)
- 分布式部署 (1)
- 堆栈信息 (1)
最新评论
第一步:导入相关依赖jar包在pom.xml文件;
<!-- redis依赖 start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring session的依赖 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- redis依赖 end -->
第二步:配置文件配置连接redis相关配置项;
#redis的ip地址
spring.redis.host=10.4.4.11
#密码
spring.redis.password=sdj
#端口号
spring.redis.port=6379
#spring.redis.database=0
#spring.session.store-type=redis
#开启cookie安全
server.servlet.session.cookie.secure=false
#客户端超时时间单位是毫秒 默认是2000
redis.timeout=100000
#最大空闲数
redis.maxIdle=5
#最小空闲数
redis.minIdle=2
#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
redis.maxTotal=20
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWaitMillis=1000
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
redis.testOnBorrow=true
第三步:编写连接redis工具类 RedisConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.pay.common.util.RedisUtil;
import com.pay.common.util.UtilJedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* redis配置类
*
* @author
*
*/
@Configuration
public class RedisConfig {
@Value("${redis.maxIdle}")
private Integer maxIdle;
@Value("${redis.minIdle}")
private Integer minIdle;
@Value("${redis.maxTotal}")
private Integer maxTotal;
@Value("${redis.maxWaitMillis}")
private Integer maxWaitMillis;
@Value("${redis.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.redis.host}")
private String hostName;
@Value("${spring.redis.port}")
private Integer port;
@Value("${spring.redis.password}")
private String password;
@Value("${redis.timeout}")
private Integer timeout;
/**
* JedisPoolConfig 连接池
*
* @return
*/
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 最大空闲数
jedisPoolConfig.setMaxIdle(maxIdle);
// 连接池的最大数据库连接数
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setMinIdle(minIdle);
// 最大建立连接等待时间
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
jedisPoolConfig.setTestOnBorrow(testOnBorrow);
return jedisPoolConfig;
}
@Bean
public JedisPool redisPoolFactory() {
JedisPool jedisPool = new JedisPool(jedisPoolConfig(), hostName, port, timeout, password, 0, "partner:1");
return jedisPool;
}
@Bean(name = "redisUtil")
public RedisUtil redisUtil() {
RedisUtil redisUtil = new RedisUtil();
redisUtil.setJedisPool(redisPoolFactory());
redisUtil.setUtilJedis(getUtilJedis());
return redisUtil;
}
@Bean(name = "utilJedis")
public UtilJedis getUtilJedis() {
return new UtilJedis();
}
}
获取图形验证码接口需要将sessionId对应的图形验证码值存入redis;
String jsessionid = session.getId();
// 验证码保存到redis;
redisUtil.setValAndExpire(Constants.REDIS_INVESTOR_CODE_PREFIX + jsessionid, Constants.CODE_TIMEOUT, verifyCode);
第四步: 拦截器处理 LoginInterceptor;
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Autowired
private RedisUtil redisUtil;
//public static String timeOutTemp;
/**
* session超时时间
*/
@Value("${cookie.timeout}")
protected String timeout;
@Autowired
private Environment env;
HttpSession session = request.getSession();
Object username = session.getAttribute(Constants.LOGIN_USER_NAME);
// 分布式环境部署sessionId读取redis存储登录对象信息;
String jsessionid = request.getSession().getId();
// 读取缓存redis登陆态信息
String loginUserInfo = (String) redisUtil.getObject(Constants.SESSION_AUTH + jsessionid);
LoginUserInfo lu = null;
if (StringUtils.isNotBlank(loginUserInfo) && null != JSONValidator.from(loginUserInfo)
&& JSONValidator.from(loginUserInfo).validate()) {
lu = JSON.parseObject(loginUserInfo, LoginUserInfo.class);
}
/**
* 判断同一个登录账号是否在多个浏览器客户端登录成功;
*
* @Title: checkSessionId
* @Description: (校验sessionId是否过期失效)
* @param loginId String
* @param sessionId String
* @return boolean 返回类型
*/
private boolean checkSessionId(String loginId, String sessionId, HttpServletRequest request) {
boolean flag = true;
// 根据登录查询用户信息,判断userName与sessionId存储在redis中的登录账号名称是否一致;
String jsessionid = request.getSession().getId();
String loginUserInfo = (String) redisUtil.getObject(Constants.SESSION_AUTH + jsessionid);
LoginUserInfo auth = JSON.parseObject(loginUserInfo, LoginUserInfo.class);
if(null == auth) {
return false;
}
//登录账号多端登录,自动踢出系统;
String userName = auth.getLoginName();
String storeRedisJsessionid = redisUtil.getKeyValue(Constants.REDIS_LOGIN_PREFIX + userName);
// LogUtil.MSG.info("checkSessionId is start 请求报文:sessionId=" + sessionId+"userName="+LogUtil.getName(loginId));
// LogUtil.MSG.info("checkSessionId is end 响应报文:" + LogUtil.printReqMsg(userInfo));
if (null != auth && jsessionid.equals(storeRedisJsessionid)) {
// 同一客户端登录(当前登录账号对应的sessionId值与数据库存储的Jsessionid一致)
} else {
// 更新数据库sessionId
flag = false;
}
return flag;
}
第五步: 登录接口处理LoginController;
@RequestMapping(value = "/login.action", method = RequestMethod.POST)
@ResponseBody
public String login(HttpServletRequest request, String randomCode) {
LogUtil.MSG.info("【用户输入验证码】 randomCode:【{}】", randomCode);
Map<String, String> map = new HashMap<String, String>();
try {
String sessionId = request.getSession().getId();
LogUtil.MSG.debug("sessionId:{}", sessionId);
//String verifyCode = (String) request.getSession().getAttribute(Constants.SESSION_RANDOMCODE);
String verifyCode = redisUtil.getKeyValue(Constants.REDIS_INVESTOR_CODE_PREFIX + sessionId);
Boolean isResponseCorrect = checkVerifyCode(randomCode, verifyCode);
if (isResponseCorrect) {
request.getSession().removeAttribute(Constants.SESSION_RANDOMCODE);
request.getSession().setAttribute(Constants.LOGIN_USER_INFO, lu);
request.getSession().setAttribute(Constants.LOGIN_USER_NAME, userName);
request.getSession().setAttribute(Constants.OPERATE_DATE, String.valueOf(new Date().getTime()));
request.getSession().setAttribute(Constants.LOGIN_USER_ID, String.valueOf(lu.getOperatorId()));
//登录成功将用户对象存入redis;
//String redisKey = userName;
String jsessionid = sessionId;
redisUtil.setValAndExpire(Constants.REDIS_LOGIN_PREFIX + userName, Constants.REDIS_TIMEOUT, jsessionid);
// 登录信息放入redis
redisUtil.setExObject(Constants.SESSION_AUTH + jsessionid, Constants.REDIS_TIMEOUT, JSONObject.toJSONString(lu));
第六步退出登录接口处理 logout;
@RequestMapping(value = "/logout.action")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession();
//退出登录从redis中删除;
String jsessionid = session.getId();
// 读取缓存redis登陆态信息
redisUtil.del(Constants.SESSION_AUTH + jsessionid);
String userName = (String) session.getAttribute("userName");
if (userName != null) {
session.removeAttribute("userName");
}
String redirectUrl = "/";
String profile = env.getProperty("spring.cloud.config.profile");
if(!"dev".equals(profile)) {
String contenxtPath = request.getContextPath();
contenxtPath = "/".equals(contenxtPath) || "".equals(contenxtPath) ? contenxtPath + "/" + EnvProperties.getDomain() : contenxtPath;
redirectUrl = contenxtPath;
}
return "redirect:" + redirectUrl;
}
<!-- redis依赖 start -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring session的依赖 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- redis依赖 end -->
第二步:配置文件配置连接redis相关配置项;
#redis的ip地址
spring.redis.host=10.4.4.11
#密码
spring.redis.password=sdj
#端口号
spring.redis.port=6379
#spring.redis.database=0
#spring.session.store-type=redis
#开启cookie安全
server.servlet.session.cookie.secure=false
#客户端超时时间单位是毫秒 默认是2000
redis.timeout=100000
#最大空闲数
redis.maxIdle=5
#最小空闲数
redis.minIdle=2
#连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
redis.maxTotal=20
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
redis.maxWaitMillis=1000
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
redis.testOnBorrow=true
第三步:编写连接redis工具类 RedisConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.pay.common.util.RedisUtil;
import com.pay.common.util.UtilJedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
/**
* redis配置类
*
* @author
*
*/
@Configuration
public class RedisConfig {
@Value("${redis.maxIdle}")
private Integer maxIdle;
@Value("${redis.minIdle}")
private Integer minIdle;
@Value("${redis.maxTotal}")
private Integer maxTotal;
@Value("${redis.maxWaitMillis}")
private Integer maxWaitMillis;
@Value("${redis.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.redis.host}")
private String hostName;
@Value("${spring.redis.port}")
private Integer port;
@Value("${spring.redis.password}")
private String password;
@Value("${redis.timeout}")
private Integer timeout;
/**
* JedisPoolConfig 连接池
*
* @return
*/
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 最大空闲数
jedisPoolConfig.setMaxIdle(maxIdle);
// 连接池的最大数据库连接数
jedisPoolConfig.setMaxTotal(maxTotal);
jedisPoolConfig.setMinIdle(minIdle);
// 最大建立连接等待时间
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
jedisPoolConfig.setTestOnBorrow(testOnBorrow);
return jedisPoolConfig;
}
@Bean
public JedisPool redisPoolFactory() {
JedisPool jedisPool = new JedisPool(jedisPoolConfig(), hostName, port, timeout, password, 0, "partner:1");
return jedisPool;
}
@Bean(name = "redisUtil")
public RedisUtil redisUtil() {
RedisUtil redisUtil = new RedisUtil();
redisUtil.setJedisPool(redisPoolFactory());
redisUtil.setUtilJedis(getUtilJedis());
return redisUtil;
}
@Bean(name = "utilJedis")
public UtilJedis getUtilJedis() {
return new UtilJedis();
}
}
获取图形验证码接口需要将sessionId对应的图形验证码值存入redis;
String jsessionid = session.getId();
// 验证码保存到redis;
redisUtil.setValAndExpire(Constants.REDIS_INVESTOR_CODE_PREFIX + jsessionid, Constants.CODE_TIMEOUT, verifyCode);
第四步: 拦截器处理 LoginInterceptor;
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Autowired
private RedisUtil redisUtil;
//public static String timeOutTemp;
/**
* session超时时间
*/
@Value("${cookie.timeout}")
protected String timeout;
@Autowired
private Environment env;
HttpSession session = request.getSession();
Object username = session.getAttribute(Constants.LOGIN_USER_NAME);
// 分布式环境部署sessionId读取redis存储登录对象信息;
String jsessionid = request.getSession().getId();
// 读取缓存redis登陆态信息
String loginUserInfo = (String) redisUtil.getObject(Constants.SESSION_AUTH + jsessionid);
LoginUserInfo lu = null;
if (StringUtils.isNotBlank(loginUserInfo) && null != JSONValidator.from(loginUserInfo)
&& JSONValidator.from(loginUserInfo).validate()) {
lu = JSON.parseObject(loginUserInfo, LoginUserInfo.class);
}
/**
* 判断同一个登录账号是否在多个浏览器客户端登录成功;
*
* @Title: checkSessionId
* @Description: (校验sessionId是否过期失效)
* @param loginId String
* @param sessionId String
* @return boolean 返回类型
*/
private boolean checkSessionId(String loginId, String sessionId, HttpServletRequest request) {
boolean flag = true;
// 根据登录查询用户信息,判断userName与sessionId存储在redis中的登录账号名称是否一致;
String jsessionid = request.getSession().getId();
String loginUserInfo = (String) redisUtil.getObject(Constants.SESSION_AUTH + jsessionid);
LoginUserInfo auth = JSON.parseObject(loginUserInfo, LoginUserInfo.class);
if(null == auth) {
return false;
}
//登录账号多端登录,自动踢出系统;
String userName = auth.getLoginName();
String storeRedisJsessionid = redisUtil.getKeyValue(Constants.REDIS_LOGIN_PREFIX + userName);
// LogUtil.MSG.info("checkSessionId is start 请求报文:sessionId=" + sessionId+"userName="+LogUtil.getName(loginId));
// LogUtil.MSG.info("checkSessionId is end 响应报文:" + LogUtil.printReqMsg(userInfo));
if (null != auth && jsessionid.equals(storeRedisJsessionid)) {
// 同一客户端登录(当前登录账号对应的sessionId值与数据库存储的Jsessionid一致)
} else {
// 更新数据库sessionId
flag = false;
}
return flag;
}
第五步: 登录接口处理LoginController;
@RequestMapping(value = "/login.action", method = RequestMethod.POST)
@ResponseBody
public String login(HttpServletRequest request, String randomCode) {
LogUtil.MSG.info("【用户输入验证码】 randomCode:【{}】", randomCode);
Map<String, String> map = new HashMap<String, String>();
try {
String sessionId = request.getSession().getId();
LogUtil.MSG.debug("sessionId:{}", sessionId);
//String verifyCode = (String) request.getSession().getAttribute(Constants.SESSION_RANDOMCODE);
String verifyCode = redisUtil.getKeyValue(Constants.REDIS_INVESTOR_CODE_PREFIX + sessionId);
Boolean isResponseCorrect = checkVerifyCode(randomCode, verifyCode);
if (isResponseCorrect) {
request.getSession().removeAttribute(Constants.SESSION_RANDOMCODE);
request.getSession().setAttribute(Constants.LOGIN_USER_INFO, lu);
request.getSession().setAttribute(Constants.LOGIN_USER_NAME, userName);
request.getSession().setAttribute(Constants.OPERATE_DATE, String.valueOf(new Date().getTime()));
request.getSession().setAttribute(Constants.LOGIN_USER_ID, String.valueOf(lu.getOperatorId()));
//登录成功将用户对象存入redis;
//String redisKey = userName;
String jsessionid = sessionId;
redisUtil.setValAndExpire(Constants.REDIS_LOGIN_PREFIX + userName, Constants.REDIS_TIMEOUT, jsessionid);
// 登录信息放入redis
redisUtil.setExObject(Constants.SESSION_AUTH + jsessionid, Constants.REDIS_TIMEOUT, JSONObject.toJSONString(lu));
第六步退出登录接口处理 logout;
@RequestMapping(value = "/logout.action")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession();
//退出登录从redis中删除;
String jsessionid = session.getId();
// 读取缓存redis登陆态信息
redisUtil.del(Constants.SESSION_AUTH + jsessionid);
String userName = (String) session.getAttribute("userName");
if (userName != null) {
session.removeAttribute("userName");
}
String redirectUrl = "/";
String profile = env.getProperty("spring.cloud.config.profile");
if(!"dev".equals(profile)) {
String contenxtPath = request.getContextPath();
contenxtPath = "/".equals(contenxtPath) || "".equals(contenxtPath) ? contenxtPath + "/" + EnvProperties.getDomain() : contenxtPath;
redirectUrl = contenxtPath;
}
return "redirect:" + redirectUrl;
}
相关推荐
springboot +shiro+redis实现session共享(方案二)1
今天用了一天来搞定了ssm+redis集成和nginx实现负载均衡,这里只有ssm+redis简单d集成demo,希望大家一起来讨论
使用说明:请严格按照资源内的readme文档来说明部署,不要搞错版本,完美支持Tomcat8和Tomcat9等新版本Tomcat,仅支持JDK8以上版本JDK。
docker-compose 形式部署 redis 1主2从3哨兵 redis 多节点高可用 redis 主从哨兵 redis 集群高可用 redis 哨兵 redis 高可用
redis+session共享,redis+session共享,redis+session共享,redis+session共享redis+session共享,redis+session共享,redis+session共享,redis+session共享,redis+session共享
Spring Boot 使用 Redis 进行配置 Session 共享(Ajax 跨域) 源码下载。
完美实现分布式集群Session共享 简单多tomcat8+redis的session共享实现,支持tomcat8、tomcat8.5、tomcat9,不能用直接联系我积分双倍返回。
集群session共享jar包之tomcat8。集群插件,redis方式实现session共享插件
session共享方案(tomcat8+redis共享session) 一步一步详细指引
tomcat-redis实现session共享
redis tomcat7 session共享
很好用,使用也很简单,把其中的三个Jar包拷贝到你的tomcat中的...tomcat8、8.5、9与redis实现session共享,并可以通过修改源码可自定义session键,访问地址:http://blog.csdn.net/fackyou200/article/details/78929008
tomcat8 redis session共享,提供commons-pool2-2.3.jar,jedis-2.7.2.jar和修改后的tomcat-redis-session-manager-master-2.0.0.jar及部署文档
ssm+redis+nginx实现session共享和负载均衡,大家一起来研究吧
自己做的一个nginx+tomcat+redis完成session共享小例子,包括所需jar,适合初学者,希望大家一起学习交流
Session共享 tomcat7+redis的session共享实现,无需重新打包,直接放入tomcat lib中就可以使用,记得修改tomcat的content.xml
适配与Tomcat7、8、9的redis session共享jar包
包含的jar包如下: commons-pool2-2.0.jar jedis-2.5.2.jar tomcat-juli-adapters.jar tomcat-juli.jar tomcat-redis-session-manager1.2.jar
Session共享 tomcat8+redis的session共享实现,支持tomcat8
nignx 进行负载后session失效的完美解决,亲测可用