一个http请求,会在tomcat中创建一个request对象,一个request对象中会有一个session对象,及会话对象,标识是某个客户端的请求,并可以存储客户端的一些身份信息

自定义session

package com.fen.dou.controller;import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionContext;
import java.util.Enumeration;public class CustomHttpSession implements HttpSession {private String id;CustomHttpSession(String id){this.id = id;}@Overridepublic long getCreationTime() {return 0;}@Overridepublic String getId() {return id;}@Overridepublic long getLastAccessedTime() {return 0;}@Overridepublic ServletContext getServletContext() {return null;}@Overridepublic void setMaxInactiveInterval(int i) {}@Overridepublic int getMaxInactiveInterval() {return 0;}@Overridepublic HttpSessionContext getSessionContext() {return null;}@Overridepublic Object getAttribute(String s) {return null;}@Overridepublic Object getValue(String s) {return null;}@Overridepublic Enumeration<String> getAttributeNames() {return null;}@Overridepublic String[] getValueNames() {return new String[0];}@Overridepublic void setAttribute(String s, Object o) {}@Overridepublic void putValue(String s, Object o) {}@Overridepublic void removeAttribute(String s) {}@Overridepublic void removeValue(String s) {}@Overridepublic void invalidate() {}@Overridepublic boolean isNew() {return false;}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;@RestController
public class SpringSessionController {@GetMapping("query")@ResponseBodypublic String query(HttpServletRequest request, HttpServletResponse response) {HttpSession session = request.getSession();session.setAttribute("hello","123123123");System.out.println("----------sessionId-----------"+session.getId());Cookie[] cookies = request.getCookies();if(cookies != null && cookies.length > 0){for (Cookie cookie : cookies){System.out.println(cookie.getName() + " " + cookie.getValue());}}return String.valueOf(session.getAttribute("hello"));}
}
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.UUID;@WebFilter(urlPatterns = {"/*"},filterName = "ycUpdateSessionFilter")
public class UpdateSessionFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request =  ((HttpServletRequest) servletRequest);HttpServletResponse response =  ((HttpServletResponse) servletResponse);Cookie[] cookies = request.getCookies();UpdateSessionRequestWrapper updateSessionRequestWrapper = null;if(cookies != null && cookies.length > 0){for(Cookie cookie : cookies){if(cookie.getName().equals("ycSessionId")){CustomHttpSession httpSession = new CustomHttpSession(cookie.getValue()) ;updateSessionRequestWrapper = new UpdateSessionRequestWrapper(request,httpSession);}}}if(updateSessionRequestWrapper == null){CustomHttpSession httpSession = new CustomHttpSession(UUID.randomUUID().toString()) ;Cookie cookie = new Cookie("ycSessionId",httpSession.getId());response.addCookie(cookie);updateSessionRequestWrapper = new UpdateSessionRequestWrapper(request,httpSession);}filterChain.doFilter(updateSessionRequestWrapper,servletResponse);}
}
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpSession;public class UpdateSessionRequestWrapper   extends HttpServletRequestWrapper {private HttpSession httpSession;public UpdateSessionRequestWrapper(HttpServletRequest request,HttpSession httpSession) {super(request);this.httpSession = httpSession;}@Overridepublic HttpSession getSession() {return httpSession;}
}

自定义httpSession相关推荐

  1. java session 持久化_自定义实现session持久化

    自定义实现session持久化 使用场景 对于有登录校验的网站,tomcat 重启之后,刷新页面又得重新登录,影响用户体验. 原因: tomcat 的session 在内存中,tomcat重启之后,内 ...

  2. 170222、使用Spring Session和Redis解决分布式Session跨域共享问题

    使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...

  3. 在SpringBoot中使用Spring Session解决分布式会话共享问题

    在SpringBoot中使用Spring Session解决分布式会话共享问题 问题描述: 每次当重启服务器时,都会导致会员平台中已登录的用户掉线.这是因为每个用户的会话信息及状态都是由session ...

  4. 利用spring session解决共享Session问题

    https://blog.csdn.net/patrickyoung6625/article/details/45694157 1.共享Session问题 HttpSession是通过Servlet容 ...

  5. Spring Session使用

    一.session的处理方式 参考本人这篇文章 二.spring session使用的session管理方式 就是Session集中管理的方式: 优点:可靠性高,减少Web服务器的资源开销. 缺点:实 ...

  6. 在共享dll中使用mfc_在SpringBoot中使用Spring Session解决分布式会话共享问题

    作者:简单的土豆 来源:www.jianshu.com/p/e4191997da56 前言 如果你正在使用Java开发Web应用,想必你对HttpSession非常熟悉,但我们知道HpptSessio ...

  7. springBoot(20):使用Spring Session实现集群-redis

    一.session集群的解决方案 1.1.扩展指定server 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略.缺点:耦合Tomc ...

  8. 使用Spring Session和Redis解决分布式Session跨域共享问题

    大家可以关注一下公众号"Java架构师秘籍" 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载 ...

  9. javaweb——总结

    day01XML上     1.XML的作用     2.XML的基本语法     3.DTD约束     4.DTD的基本语法(看懂DTD就ok)     5.XML的解析方式:原理     6.J ...

  10. Spring-Session实现session共享原理及解析

    写在前面 Session简介 是什么? Session在网络中表示"会话控制",用于存储特定用户所需的属性和其他的配置信息:Session表示一个特定的时间间隔,可以指用户从登陆系 ...

最新文章

  1. 2. Web Dynpro for ABAP :Component Controller
  2. redis 数据类型、命令
  3. 【资讯】K8S生态再添一员,Rancher发布开源HCI软件Harvester、及其安装教程
  4. 分享字符串右移的算法
  5. Oracle自定义聚集函数
  6. html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例
  7. 【计算机科学基础】数据运算
  8. Linux下关于安全的一些小技巧大问题(图文)
  9. 论文笔记--网络新闻图像中人脸标注技术的研究-2011
  10. 高级数据结构及应用 —— 使用 bitmap 进行字符串去重
  11. Leetcode 456.132模式
  12. 72. 文件上传(1)
  13. 雄伟到惊世骇俗的黄羊山超级相控阵雷达
  14. 按需使用vue-cli-plugin-element插件
  15. 如何使用阿里云的NAS云文件存储服务
  16. tomcat之连接器
  17. 接入层、汇聚层和核心层工业交换机怎么选?
  18. vue项目整合UEditor看这一篇就够了
  19. 简述SpringBoot Starter原理及自定义实现
  20. Linux的Anaconda换阿里源

热门文章

  1. delphi mysql5_Delphi7连接MySql5.5.15
  2. js一键批量打印_前端vue项目实现批量打印功能
  3. 【解决问题】java.lang.ClassNotFoundException: com.Application 问题的几种解决方案
  4. mysql必须记住的单词_如何真正记住英语单词?
  5. 程序员的Win10必备软件
  6. matlab信号处理基础(音频和图像)
  7. ArcGIS矢量数据重分类
  8. Lesson 6: CronTrigger
  9. 计算机学术论文3000字,计算机学术论文3000字_计算机学术毕业论文范文模板.doc...
  10. 简单的贪吃蛇java代码6_java简单贪吃蛇代码