Spring session共享(使用redis)
SpringBoot+Redis实现HttpSession共享
前提:需要使用redis做session存储 一、效果演练(这里使用SpringBoot工程,Spring同理) 1.一个工程使用两个端口启用,或者两个工程两个端口启用(这里使用一个工程两个端口号启动)
(1)#设置properties配置的服务器端口号
server.port=8081
然后启动。
(2)#设置properties配置的服务器端口号
server.port=8082
然后启动。
到此,已经启动两个工程。 2.分别访问工程8081和8082
(1)8081

(2)8082

(3)8081添加session信息,name="丁洁"

(4)再次查看8081和8082的session信息


(5)清除8082的session name 再分别查看8081和8082的session信息



二、源码分享
1.pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.szw</groupId>
<artifactId>springboot_nginx</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_nginx</name> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
<relativePath></relativePath>
</parent> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.test.skip>true</maven.test.skip>
<skipTests>true</skipTests>
<java.version>1.8</java.version>
<start-class>com.nginx.session.NginxSessionApplication</start-class>
</properties> <dependencies>
<!-- 使用web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 使用aop模板启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- 测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring-Session -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<!-- Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
</dependencies> <build>
<plugins>
<!-- 打可运行的jar -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<!-- 打源码包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build> <!-- maven私服deploy -->
<distributionManagement>
<repository>
<id>releases</id>
<name>Releases</name>
<url>http://192.168.3.71:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Snapshots</name>
<url>http://192.168.3.71:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement> <repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories> </project>
2.application.properties
#设置项目contex路径
#server.context-path=/nginx/session
#服务器端口号
server.port=8081
#server.port=8082
#会话session超时时长
server.session.timeout=1800 ## redis地址
spring.redis.host=192.168.159.129
## redis端口
spring.redis.port=7001
## 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=300
## Redis数据库索引(默认为0)
spring.redis.database=0
## 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
## 连接池中的最大空闲连接
spring.redis.pool.max-idle=100
## 连接池中的最小空闲连接
spring.redis.pool.min-idle=20
## 连接超时时间(毫秒)
spring.redis.timeout=60000
3.controller
package com.nginx.session.controller; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
public class HelloWorldContoller {
@Value("${server.port}")
private String port; @RequestMapping("/")
public String helloWold(HttpServletRequest req){
HttpSession session = req.getSession();
Object obj = req.getSession().getAttribute("name");
String name = null!=obj?obj.toString():null;
return "<h2>hello world<br/>我的端口号是:"+port+"<br/>我的sessionId:"+session.getId()+"<br/>session name = "+name+"</h2>";
} @RequestMapping("add/{name}")
public String addSession(HttpServletRequest req,@PathVariable("name")String name){
if(StringUtils.isEmpty(name)){
return "add/{name}不能为空";
}else{
req.getSession().setAttribute("name", name);
return "<h1>设置session name = "+name+"</h1>";
}
} @RequestMapping("get")
public String getSession(HttpServletRequest req){
Object obj = req.getSession().getAttribute("name");
String name = null!=obj?obj.toString():null;
return "<h1>获取session name = "+name+"</h1>";
} @RequestMapping("clear")
public String clearSession(HttpServletRequest req){
req.getSession().removeAttribute("name");
Object obj = req.getSession().getAttribute("name");
String name = null!=obj?obj.toString():null;
return "<h1>清除session name = "+name+"</h1>";
}
}
4.Application启动类
package com.nginx.session; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
public class NginxSessionApplication { public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(NginxSessionApplication.class, args);
}
}
5.工程截图

Spring session共享(使用redis)的更多相关文章
- 【Spring Session】和 Redis 结合实现 Session 共享
[Spring Session]和 Redis 结合实现 Session 共享 参考官方文档 HttpSession with Redis Guide https://docs.spring.io/s ...
- 大话 Spring Session 共享
javaweb中我们项目稍微正规点,都会用到单点登录这个技术.实现它的方法各家有各界的看法.这几天由于公司项目需求正在研究.下面整理一下最近整理的心得. 简介 在分布式项目中另我们头疼的是多项目之间的 ...
- spring-session之四:Spring Session下的Redis存储结构
spring-session项目启动后 127.0.0.1:6379> keys * 1) "spring:session:index:org.springframework.sess ...
- (十九)SpringBoot之使用Spring Session集群-redis
一.引入maven依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEnc ...
- session共享同步redis策略
关于session共享的文章,网上很多,可是最关键的点我没有看到一篇.也就是session对象到底是怎么同步到redis的. spring-session底层原理到底是怎么样的一个同步更新策略,我没有 ...
- Nginx+Tomcat搭建集群,Spring Session+Redis实现Session共享
小伙伴们好久不见!最近略忙,博客写的有点少,嗯,要加把劲.OK,今天给大家带来一个JavaWeb中常用的架构搭建,即Nginx+Tomcat搭建服务集群,然后通过Spring Session+Redi ...
- Spring Session + Redis实现分布式Session共享
发表于 2016-09-29 文章目录 1. Maven依赖 2. 配置Filter 3. Spring配置文件 4. 解决Redis云服务Unable to configure Redis to k ...
- Spring Boot从入门到精通(七)集成Redis实现Session共享
单点登录(SSO)是指在多个应用系统中,登录用户只需要登录验证一次就可以访问所有相互信任的应用系统,Redis Session共享是实现单点登录的一种方式.本文是通过Spring Boot框架集成Re ...
- springboot+redis实现分布式session共享
官方文档,它是spring session项目的redis相关的一个子文档:https://docs.spring.io/spring-session/docs/2.0.0.BUILD-SNAPSHO ...
随机推荐
- Vsphere笔记06 Vcenter 部署流程 1
Vcenter 部署流程 1 一.环境需求 1.需要两台装着WIN2K8 R2 64X的服务器 2.启用一台要添加活动目录角色,并且配置DC,DC的参数如下: 域名:justech-dc. ...
- 基于docker的webrtc开发环境
在root目录下先放好自定义的constants.py文件再docker run 同时记得修改PUBLIC_IP 可以跨wifi通信 docker pull piasy/apprtc-server d ...
- spring oauth Role and Authority and scope
使用hasRole class Grant implements GrantedAuthority{ @Override public String getAuthority() { return & ...
- EasyUI DataGrid 相同连续列合并
扩展方法:$.extend($.fn.datagrid.methods, { autoMergeCells: function(jq, fields) { return jq.each(functio ...
- Java中将时间戳转化为Date类型
时间戳timestamp,从前端接收到后.他能够是一个long或者包装类Long再或者是个String类型.仅仅需 new Date(时间戳) 就能够直接转化为java.util.Date类型. 转化 ...
- C#二进制序列化和反序列化
public class WRSerializable { public static void SerializeToFile<T>(T _description, string _fi ...
- Chromium开发--入门C++小样例
開始做Chromium开发的时候,都是从代码去摸索的,如今有几个样例了.希望看到的同学能有帮助,比直接在大量代码里领悟要快非常多了. C++ in Chromium 101 - Codelab h ...
- Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.3——整合resource文件
问题: 想要在product的flavor里面改变图片,文字或者其它资源. 解决方案: 在flavor里面增加合适的资源目录,并且改变他们包含的值. 讨论: 考虑下3.2章的“hello world ...
- 【BZOJ4716】假摔 二分+暴力
[BZOJ4716]假摔 Description [题目背景] 小Q最近喜欢上了一款游戏,名为<舰队connection>,在游戏中,小Q指挥强大的舰队南征北战,从而成为了一名dalao. ...
- 【BZOJ3122】[Sdoi2013]随机数生成器 BSGS+exgcd+特判
[BZOJ3122][Sdoi2013]随机数生成器 Description Input 输入含有多组数据,第一行一个正整数T,表示这个测试点内的数据组数. 接下来T行,每行有五个整数p,a,b, ...