SpringSession-使⽤Redis存储HttpSession例⼦
⽬的
使⽤Redis存储管理HttpSession;
添加p om.x m l
该⼯程基于Spring Boot,同时我们将使⽤Spring IO Platform来维护依赖版本号;
引⼊的依赖有spring-session、spring-boot-starter-web、spring-boot-starter-redis,pom⽂件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId&le</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>Athens-SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.4.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- Additional lines to be -->
<dependencies>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
springboot其实就是spring<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.3.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
配置Sp r ing Se s s ion
配置⽐较简单,主要是添加@EnableRedisHttpSession注解即可,该注解会创建⼀个名字叫springSessionRepositoryFilter的Spring Bean,其实就是⼀个Filter,这个Filter负责⽤Spring Session来替换原先的默认HttpSession实现,在这个例⼦中,Spring Session是⽤Redis来实现的。
import org.springframework.fig.annotation.web.http.EnableRedisHttpSession;
@EnableRedisHttpSession
public class HttpSessionConfig {
}
操作Http Se s s ion
这⾥我们将实现两个操作,⼀个是往Session中写⼊数据,另⼀个是查询数据,如下所⽰:
@RestController
public class Example {
@RequestMapping("/set")
String set(HttpServletRequest req) {
return "设置session:testKey=testValue";
}
@RequestMapping("/query")
String query(HttpServletRequest req) {
Object value = Session().getAttribute("testKey");
return "查询Session:\"testKey\"=" + value;
}
}
编写m ain⽅法
编写main⽅法,使⽤@SpringBootApplication注解标注,如果查看该注解源码的话,会发现相当于添加了@@@等注解import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class APP {
public static void main(String[] args) throws Exception {
SpringApplication.run(APP.class, args);
}
}
运⾏程序,测试验证
1、本地启动redis服务;
2、打开redis客户端,输⼊flushall清空缓存;
redis客户端输⼊keys *命令, 可以发现redis中确实有数据插⼊:
发现HttpSession中已经⽆数据。
最后,如果查看浏览器的cookie的话,会发现有⼀个name为“SESSION”的cookie,其值为redis中spring session key的⼀部分。
另外,还可以在redis客户端输⼊HGETALL来查看spring session具体的值,如下:
结论:以上测试结果全部符合预期,HttpSession的实现成功被Spring Session替换,操作HttpSession等同于操作redis中的数据。⼯程源码参考
参考资料
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论