自定义httpSession
一个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相关推荐
- java session 持久化_自定义实现session持久化
自定义实现session持久化 使用场景 对于有登录校验的网站,tomcat 重启之后,刷新页面又得重新登录,影响用户体验. 原因: tomcat 的session 在内存中,tomcat重启之后,内 ...
- 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
使用Spring Session和Redis解决分布式Session跨域共享问题 原创 2017-02-27 徐刘根 Java后端技术 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用 ...
- 在SpringBoot中使用Spring Session解决分布式会话共享问题
在SpringBoot中使用Spring Session解决分布式会话共享问题 问题描述: 每次当重启服务器时,都会导致会员平台中已登录的用户掉线.这是因为每个用户的会话信息及状态都是由session ...
- 利用spring session解决共享Session问题
https://blog.csdn.net/patrickyoung6625/article/details/45694157 1.共享Session问题 HttpSession是通过Servlet容 ...
- Spring Session使用
一.session的处理方式 参考本人这篇文章 二.spring session使用的session管理方式 就是Session集中管理的方式: 优点:可靠性高,减少Web服务器的资源开销. 缺点:实 ...
- 在共享dll中使用mfc_在SpringBoot中使用Spring Session解决分布式会话共享问题
作者:简单的土豆 来源:www.jianshu.com/p/e4191997da56 前言 如果你正在使用Java开发Web应用,想必你对HttpSession非常熟悉,但我们知道HpptSessio ...
- springBoot(20):使用Spring Session实现集群-redis
一.session集群的解决方案 1.1.扩展指定server 利用Servlet容器提供的插件功能,自定义HttpSession的创建和管理策略,并通过配置的方式替换掉默认的策略.缺点:耦合Tomc ...
- 使用Spring Session和Redis解决分布式Session跨域共享问题
大家可以关注一下公众号"Java架构师秘籍" 前言 对于分布式使用Nginx+Tomcat实现负载均衡,最常用的均衡算法有IP_Hash.轮训.根据权重.随机等.不管对于哪一种负载 ...
- javaweb——总结
day01XML上 1.XML的作用 2.XML的基本语法 3.DTD约束 4.DTD的基本语法(看懂DTD就ok) 5.XML的解析方式:原理 6.J ...
- Spring-Session实现session共享原理及解析
写在前面 Session简介 是什么? Session在网络中表示"会话控制",用于存储特定用户所需的属性和其他的配置信息:Session表示一个特定的时间间隔,可以指用户从登陆系 ...
最新文章
- 2. Web Dynpro for ABAP :Component Controller
- redis 数据类型、命令
- 【资讯】K8S生态再添一员,Rancher发布开源HCI软件Harvester、及其安装教程
- 分享字符串右移的算法
- Oracle自定义聚集函数
- html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例
- 【计算机科学基础】数据运算
- Linux下关于安全的一些小技巧大问题(图文)
- 论文笔记--网络新闻图像中人脸标注技术的研究-2011
- 高级数据结构及应用 —— 使用 bitmap 进行字符串去重
- Leetcode 456.132模式
- 72. 文件上传(1)
- 雄伟到惊世骇俗的黄羊山超级相控阵雷达
- 按需使用vue-cli-plugin-element插件
- 如何使用阿里云的NAS云文件存储服务
- tomcat之连接器
- 接入层、汇聚层和核心层工业交换机怎么选?
- vue项目整合UEditor看这一篇就够了
- 简述SpringBoot Starter原理及自定义实现
- Linux的Anaconda换阿里源
热门文章
- delphi mysql5_Delphi7连接MySql5.5.15
- js一键批量打印_前端vue项目实现批量打印功能
- 【解决问题】java.lang.ClassNotFoundException: com.Application 问题的几种解决方案
- mysql必须记住的单词_如何真正记住英语单词?
- 程序员的Win10必备软件
- matlab信号处理基础(音频和图像)
- ArcGIS矢量数据重分类
- Lesson 6: CronTrigger
- 计算机学术论文3000字,计算机学术论文3000字_计算机学术毕业论文范文模板.doc...
- 简单的贪吃蛇java代码6_java简单贪吃蛇代码