热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

22.SpringBoot中SpringSession介绍

22.Spring-Boot中SpringSession介绍,Go语言社区,Golang程序员人脉社

官方文档:https://docs.spring.io/spring-session/docs/2.0.2.RELEASE/reference/html5/   

 在单应用中我们的session来保存用户信息,通常会保存在服务器中(如tomcat),但是我们把应用搭建成分布式的集群,然后利用LVS或Nginx做负载均衡,那么来自同一用户的Http请求将有可能被分发到两个不同的应用中。

   那么如何解决在分布式中的session共享问题。可行的方案有memcached实现session共享,也可以用redis实现。今天主要介绍Spring Session.

    Spring Session提供了一个API和实现来管理用户的会话信息,同时也使得支持集群会话而不被绑定到应用程序容器特定的解决方案而变得微不足道。

     实际上,我们不使用Tomcat的HttpSession,而是将session Id值持久化到Redis中。Spring Session将使用由Redis支持的实现替换HttpSession。

主要是通过对请求和相应session的封装:

SessionRepositoryFilter:

   基于Spring Boot的Spring Session介绍。

    (1)pom.xml配置


    org.springframework.boot
    spring-boot-starter-data-redis
 

     org.springframework.session
     spring-session-data-redis

在添加所需的依赖项之后,可以创建Spring Boot配置。感谢自动配置支持,在Redis的支持下设置Spring Session就像在您的应用程序中添加一个配置属性一样简单。

(2)application.properties配置

#session存储类型
spring.session.store-type=redis
#设置session超时时间
server.session.timeout=2000
spring.redis.host=127.0.0.1
spring.redis.port=6379

(3)controller中测试

@RequestMapping(value = "/index", method = RequestMethod.POST)
@ResponseBody
public PageResultBean index(UserQuery query, HttpServletRequest request) {
   HttpSession session = request.getSession();
    if (session.getAttribute("user") == null) {
      session.setAttribute("user", "zhangsan");
      System.out.println("不存在session");
    } else {
     System.out.println("存在session");
   }
  List list = userService.queryListByPage(query);
  int queryCount = userService.queryCount(query);
  PageResultBean pageResultBean = new PageResultBean();
  pageResultBean.setData(list);
  pageResultBean.setPageNumber(query.getPageNumber());
  pageResultBean.setPageSize(query.getPageSize());
  pageResultBean.setTotalCount(queryCount);
  return pageResultBean;
}

对于第一次请求会打印,“不存在session”,这时候就会创建session,并保存到Redis中,同时也会返回给浏览器。

 "spring:session:expirations:1521635340000" set类型
 "spring:session:sessions:7e995929-f063-4779-a382-e831bdb88386" 是hash类型

 "spring:session:sessions:expires:7e995929-f063-4779-a382-e831bdb88386"  string类型 

通过 hkeys  spring:session:sessions:7e995929-f063-4779-a382-e831bdb88386  ,查询所有的fields

maxInactiveInterval   session活跃时间(多少秒后过期) ,默认为180s 30min 
lastAccessedTime  最后一次访问会话的时间 距离1/1/1970 的毫秒
creationTime  session创建时间距离1/1/1970 的毫秒
sessionAttr:user  为session中的一个属性,一般是在程序中自定义的

微信公众号               


推荐阅读
author-avatar
若涵她娘_124
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有