### 18.3.1 Spring Session介绍 在默认情况下,Spring Boot使用tomcat服务器的session实现,我们编写一个简单用于测试 ~~~java @Controller public class SpringSessionCrontroller { Log log = LogFactory.getLog(SpringSessionCrontroller.class); @RequestMapping("/putsession.html") public @ResponseBody String putSession(HttpServletRequest request){ HttpSession session = request.getSession(); log.info(session.getClass()); log.info(session.getId()); String name = "xiandafu"; session.setAttribute("user", name); return "hey,"+name; } } ~~~ 如果访问服务/putsession.html,控制台输出为 ~~~ SpringSessionCrontroller : class org.apache.catalina.session.StandardSessionFacade SpringSessionCrontroller : F567C587EA25CBD5B9A75C62AB51904D ~~~ 可以看到,Session管理是通过Tomcat提供的org.apache.catalina.session.StandardSessionFacade来实现的。 配置文件application.properties 添加如下内容 ~~~properties spring.session.store-type=Redis|JDBC|Hazelcast|MongoDB|none ~~~ Spring Boot 配置,很容易切换到不同Session管理方式,总共有如下几种 * Redis:Session数据存放Redis里,这一章将会重点介绍。 * JDBC,会话数据存放在数据库里,默认情况下SPRING_SESSION表存放session基本信息,如sessionId,创建时间,最后一次访问时间等,SPRING_SESSION_ATTRIBUTES 存放了session数据,列ATTRIBUTE_NAME保存了session的 key,ATTRIBUTE_BYTES 以字节形式保存了session的value。这俩张表Spring Session会自动创建。 * Hazelcast:Sesson数据存放到Hazelcast。 * MongoDB,Sesson数据存放到MongoDB。 * none:禁用Spring Session功能。 通过配置属性spring.session.store-type来指定session的存储方式,如 ~~~properties spring.session.store-type=Reids ~~~ 修改为配置和增加Spring session依赖后,如果访问服务/putsession.html,控制台输出为 ~~~ SpringSessionCrontroller : class org.springframework.session.web.http.SessionRepositoryFilter$SessionRepositoryRequestWrapper$HttpSessionWrapper SpringSessionCrontroller : d4315e92-48e1-4a77-9819-f15df9361e68 ~~~ 可以看到,Session已经替换为HttpSessionWrapper实现,这个类负责一种Spring Boot 的Session存储类型的具体实现。