tomcat4改进sessionincookie.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
tomcat4改进sessionincookie

Session模块升级 向tomcat集群中部署应用而不需要终止向用户提供服务,tomcat中的会话需要在不同节点之间共享,因此,我设计并实现了一个Session In Cookie来解决Session的共享问题。 实现Session共享的好处是如果某一天计算机断电了,一个节点上的请求丢失了,但是别的节点还可以继续去处理保存的Session中的会话请求,不会像之前那样,如果断电,那么保存在节点上的Session存储中的信息会丢失。 设计思路是将Session存储在浏览器中,每个Session通过Server的response发送到浏览器,然后用户每次发送请求均需要将该Session发送回Server中,无论是哪一个节点处理用户请求,均可获取到当前用户的Session信息。该种方法广泛应用于ruby社区。虽然此种方法比较简单,而且实用,但是会存在安全问题,所以需要解决安全问题。 如果要实现这个模式,需要解决两个问题:1、处理接收到的请求信息,将Cookie反序列化为Session属性;2、处理返回的响应信息,将Session属性序列化为Cookie。由于要对请求和响应做处理,所以需要对这两个消息进行拦截,因此可以使用Servlet Filter,在过滤器中实现对Session对象的序列化与反序列化。 控制Response提交:当服务器处理完请求后,需要Filter向Response对象添加Cookie对象,因此需要先对Response对象进行包装。首先创建FilterResponseWrapper和WrappedServletOutputStream这两个类,在FilterResponseWrapper类内部,有一个WrappedServletOutputStream对象和一个PrintWriter对象用于将内容写入输出流中,这两步就可以控制Response提交的时间了,因此,在返回响应到客户端之前可以将SessionInCookie添加到Response对象中去,Response对象处理完毕后,可以通过调用responseWrapper.flushBuffer()方法完成响应的提交。 FilterResponseWrapper类是HttpServletResponseWrapper类的一个子类,这个类是response对象的最简单的实现,且可以修改response对象中的方法和属性。FilterResponseWrapper对象中的方法默认调用被包装的response对象方法,仅在部分函数中根据需要进行更改。重写了getOutputStream()方法确保数据写入WrappedServletOutputStream对象内部;同时重写了getWriter()方法和flushBuffer()方法确保在PrintWriter内部完成数据的刷新写入功能。 WrappedServletOutputStream类继承自ServletOutputStream,提供一个内部的FilterOutputStream对象用于控制刷新流数据。 当Filter接收到request时,Filter会将请求中的Cookie反序列化为CookieSession对象,即将request中的Cookie转化为存储属性键值的CookieSession对象。CookieSession对象只存储请求中的属性map而不是整个请求中的Cookie的所有信息,因为Session对象是由容器创建的,是不能被初始化的。为了获得一个全新的Session对象,可以将现存的有效地Session设置为无效,让容器创建一个全新的Session对象。 CookieSession类是一个用于存放属性map的容器类,一旦从容器中获取到了一个新的Session对象,便会将CookieSession对象中存储的属性map拷贝到新创新的HttpSession中。 反序列化操作是从String转换为SessionCookie对象的过程。为了确保属性值只包含有效字符,使用Base64(ASCII)方式存储属性值。 一旦控制器完成了对response对象的写入,Filter对象的第二部分将SessionCookie对象中的属性map序列化并添加到response对象中发给客户端。 Filter的实现需要在web.xml中配置或者使用注解来完成,监听所有请求。 Filter的主要方法实现: 最终结果展示:

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档