现在我们开始讲Spring Session,首先进入maven中央仓库,在百度查一下,如何替换成阿里云的仓库就OK了,
我们搜索什么呢,spring-session-data-redis,这里面找到这个包了
然后我们点击这个all,我们要拿的是1.2.0的版本,也就是1.2.0这个version,然后把这个xml复制一下,
<!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>1.2.0.RELEASE</version>
</dependency>
因为我们在nginx上测试是OK的,
可以看到对应的jar包已经下载下了,spring data redis依赖的还有这些,就全部下载下来了,那我们现在来介绍一下
Spring Session,首先从他的官网开始,我们进入spring.io这么一个网址
https://spring.io/
然后上边有一个projects,我们点击他
https://spring.io/projects
往下找,这里面都是Spring的各种项目,有一个Spring Session,我们点击他,那么这个时候呢
https://spring.io/projects/spring-session
就进入到了Spring Session的官网,这里面有一个quick start
在这里面可以下载,有maven的访问方式,我们是使用maven的使用方式,这里面还有各种版本,后面带snap shot就是
快照版本,并不是正式版,我们点开第一个HttpSession and Redis,然后呢来到了这个网址
https://docs.spring.io/spring-session/docs/current/reference/html5/guides/java-redis.html
这网址就是快速启动,这里面就是快速开始的一个介绍,官方提供的是lettuce这种方式,
pom.xml
<dependencies>
<!-- ... -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.1.7.RELEASE</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
</dependencies>
包括往下看,里边用的是LettuceConnectionFactory
@EnableRedisHttpSession
public class Config {
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory();
}
}
这里面注意一下
https://docs.spring.io/spring-session/docs/current/reference/html5/guides/java-redis.html
当我们把后面两个删除,只留到html5的时候
https://docs.spring.io/spring-session/docs/current/reference/html5/
就是Spring Session的一个文档,
介绍在1.3里面有哪些东西,例子,还有Http Session的各种集成方式,Redis,JDBC,Mongo,下面还有API文档,
还有Spring Session的一个社区,安全方面的,WebSocket方面的,那其实Spring Session非常强大,我们先看一下
API Documentation,这里面有一个RedisOperationsSessionRepository,Redis操作的一个说明,那这里面用的例子是
Lettuce,有各种参数的一个介绍,存储的详情,HMSET,M是多个,首先这里面会set这么多值
HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe creationTime 1404360000000 \
maxInactiveInterval 1800 \
lastAccessedTime 1404360000000 \
sessionAttr:attrName someAttrValue \
sessionAttr2:attrName someAttrValue2
EXPIRE spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe 2100
APPEND spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe ""
EXPIRE spring:session:sessions:expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe 1800
SADD spring:session:expirations:1439245080000 expires:33fdd1b6-b496-4b33-9f7d-df96679d32fe
EXPIRE spring:session:expirations1439245080000 2100
然后再expire一下,相信我说这些命令的时候,官方文档写的是非常清楚的,这里面说了,在这个例子中,这个sessionId呢,
这个session是在什么时候创建的,以毫秒为计时,然后从1970年1月1日的半夜,也就是说,0点开始计算的,到现在的一个
毫秒数,然后session的有效期是1800秒,也就是30分钟,那和我们项目中,默认的时间是一致的,然后是session最后会访问的
时间,也是毫秒数,从1970年1月1号到现在的,然后这个session有两个属性,后面的说明就是说明这两个属性的
In the preceding example, the following statements are true about the session:
The session ID is 33fdd1b6-b496-4b33-9f7d-df96679d32fe.
The session was created at 1404360000000 (in milliseconds since midnight of 1/1/1970 GMT).
The session expires in 1800 seconds (30 minutes).
The session was last accessed at 1404360000000 (in milliseconds since midnight of 1/1/1970 GMT).
The session has two attributes. The first is attrName, with a value of someAttrValue.
The second session attribute is named attrName2, with a value of someAttrValue2.
然后我们看一下Spring Session的一个社区,然后这里有源码,
12.2. Source Code
You can find the source code on GitHub at https://github.com/spring-projects/spring-session/
然后我们点击进入Spring github,进入Spring Session的源码,当然默认master就是1.3.1版本,然后我们点击Branch,
因为我们要引入的是1.2.0,那进入这里之后啊,文档,下面还有各种集成的方式,主要看samples,这个就是spring session
1.2.x的各种例子
https://github.com/spring-projects/spring-session/tree/1.2.x/samples
里边非常全面,包括custom-cookie,因为我们开始实现的就是custom-cookie,里面的值就是JSESSIONID,当然我们不使用
JSESSIONID也是OK的,我们可以使用一个自己生成的UUID,只要记录到我们指定的cookie上就可以了,下边还有各种集成的
方式,包括xml,jdbc,还有mongo,还有rest,下边还有一个websocket