分析logfilter+session
1.P132分析:
long before = System.currentTimeMillis();
//返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。而且可以用这个值来构造一个Date对象。
HttpServletRequest hrequest = (HttpServletRequest)request;
//HttpServletRequest接口是ServletRequest子接口,HttpServletRequest接口遵循http协议。将ServletRequest请求转换为HttpServletRequest请求。
System.out.println("Filter已经截获到用户的请求的地址: " +hrequest.getServletPath());
//输出提示信息,通过getServletPath()方法获取请求的路径,在日志中记录请求的url。(不完整的url形式输出)
long after = system.currentTimeMillis();
//返回当前的计算机时间,标记结束时间,和前面的before构成范围,计算过滤所需时间。
2.用filter做用户授权的例子(代码积累):
用Filter防止用户访问一些未被授权的资源,比如一个用户未登录就不允许访问网站的某些页面,并将页面重定向到需要用户登录的页面,下面是一个相关的例子:
package com.drp.util.filter; import java.io.IOException; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class AuthFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
/** 1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括
* 表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过
* 滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
*/ HttpServletRequest request = (HttpServletRequest)servletRequest;
/** 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中
* 无法得到的方法,就要把此request对象构造成HttpServletRequest
*/
HttpServletResponse response = (HttpServletResponse)servletResponse; String currentURL = request.getRequestURI(); //取得根目录所对应的绝对路径: String targetURL = currentURL.substring(currentURL.indexOf("/", 1),
currentURL.length()); //截取到当前文件名用于比较 HttpSession session = request.getSession(false); if (!"/login.jsp".equals(targetURL)) {
//判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
if (session == null || session.getAttribute("user") == null) {
//*用户登录以后需手动添加session
System.out.println("request.getContextPath()=" + request.getContextPath());
response.sendRedirect(request.getContextPath() + "/login.jsp");
//如果session为空表示用户没有登录就重定向到login.jsp页面
return;
}
}
//加入filter链继续向下执行
filterChain.doFilter(request, response);
/** 调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作
* 为它 的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另
* 一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
*/
} public void init(FilterConfig filterConfig) throws ServletException { }
}
3.session:
①session是什么:中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息。当session一词与网络协议相关联时,它又往往隐含了“面向连接”和/或“保持状态”这样两个含义,“面向连接”指的是在通信双方在通信之前要先建立一个通信的渠道,session在web开发语境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器之间保持状态的解决方案,有时候session也用来指这种解决方案的存储结构,如“把xxx保存在session里。由于各种用于web开发的语言在一定程度上都提供了对这种解决方案的支持,所以在某种特定语言的语境下,session也被用来指代该语言的解决方案,比如经常把Java里提供的javax.servlet.http.HttpSession简称为session,当用户登录后,需要把用户信息保存到session中,便于确保用户操作权限,在其它页面通过检查session是否为null可以知道用户是否登录。
②session的使用:使用request对象获取session,然后进行操作:(1)引入包servlet-api.jar;(2)使用request获取session:HttpSession session = request.getSession();(3)对session的操作:
session.setAttribute("key", value);
session.getAttribute("key");
session.removeAttribute("key");
session.invalidate(); //删除所有session中保存的键
③怎样管理:session管理,有四种方法:
(1)session复制:需要专门的同步进程, 同步集群中的应用服务器对象。这种方法比较简单, 从本地读取session也比较快,但是集群较大时, 会占用较多服务器和网络资源。
(2)session绑定:通过负载均衡的源地址hash算法, 将源ip的请求,总是发送到固定的应用服务器。但是, 这种方法不能满足系统高可用, 如果一台应用服务器宕机之后, 用户转发到其它应用服务器时, 其session将丢失。
(3)cookie记录session:cookie方式将session信息保存在客户端,这种方式虽然简单易用且能降低应用服务器负载,但是缺点较多:受cookie大小限制;需要客户端浏览器支持cookie;每次请求需要传递cookie,增加网络负担;安全性问题。
(4) session服务器:采用独立服务器, 使用文件、数据库或缓存系统来管理session, 实现session在应用服务器间的共享。 这种方式满足可伸缩(可集群化)、高可用(建立session服务器集群),性能也不错。
分析logfilter+session的更多相关文章
- 一个由正则表达式引发的血案 vs2017使用rdlc实现批量打印 vs2017使用rdlc [asp.net core 源码分析] 01 - Session SignalR sql for xml path用法 MemCahe C# 操作Excel图形——绘制、读取、隐藏、删除图形 IOC,DIP,DI,IoC容器
1. 血案由来 近期我在为Lazada卖家中心做一个自助注册的项目,其中的shop name校验规则较为复杂,要求:1. 英文字母大小写2. 数字3. 越南文4. 一些特殊字符,如“&”,“- ...
- [asp.net core 源码分析] 01 - Session
1.Session文档介绍 毋庸置疑学习.Net core最好的方法之一就是学习微软.Net core的官方文档:https://docs.microsoft.com/zh-cn/aspnet/cor ...
- zookeeper源码分析之六session机制
zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...
- Tomcat源码分析 (十)----- 彻底理解 Session机制
Tomcat Session 概述 首先 HTTP 是一个无状态的协议, 这意味着每次发起的HTTP请求, 都是一个全新的请求(与上个请求没有任何联系, 服务端不会保留上个请求的任何信息), 而 Se ...
- Flask框架(五) —— session源码分析
Flask框架(五) —— session源码分析 目录 session源码分析 1.请求来了,执行__call__方法 2.__call__方法 3.调用__call__方法 3.1.ctx = s ...
- nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)
本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...
- NSURLSession使用说明及后台工作流程分析
原文摘自http://www.cocoachina.com/industry/20131106/7304.html NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConne ...
- ios NSURLSession(iOS7后,取代NSURLConnection)使用说明及后台工作流程分析
NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的.在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作.注意, ...
- 理解HTTP session原理及应用
转自:http://www.2cto.com/kf/201206/135471.html 一.术语session在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣 ...
随机推荐
- BZOJ-3208|记忆化搜索-花神的秒题计划Ⅰ
背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题-- 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我 ...
- ComponentOne 2019V1:全面支持 Visual Studio 2019
ComponentOne Enterprise 2019V1已经正式发布,本次更新的最大亮点就是 ComponentOne 控件全面支持 Visual Studio 2019. 作为一款专注于企业应用 ...
- ArcGIS Pro玩转BIM应用浅谈
基于GIS和BIM的集成和融合能给人类带来的价值将是巨大的,方向也是明确的.在国际范围内,各国的专家学者对智慧城市多持有乐观态度,大力倡导建设.基于BIM和GIS结合的智能城市将是一个成熟技术的融合, ...
- React-native完整配置流程
开头敲黑板!! 无论你是RN的新手还是老手,跟着流程走,RN项目搭建起来完全不是问题! 一.网址收集 expo配置网址:https://blog.expo.io/building-a-react- ...
- curl的Get请求,封装方法
//GET请求//参数1是请求的url//参数2是发送的数据的数组//参数3是其他GET选项private function curlGET($url, array $get = array(), a ...
- Confluence 6 升级以后
7. 拷贝你的数据库驱动 如果你现在使用的是 Oracle 或者 MySQL 数据库的话,你讲要重新拷贝 jdbc 驱动的 jar 文件到你已经存在的 Confluence 安装目录中 conflue ...
- SQL合并
SELECT idName,SUM(Money),SUM(Revenue)FROM ( SELECT agentID AS idName,SUM(totalMoney) AS Money,0 A ...
- PAT 1116 Come on! Let's C
1116 Come on! Let's C (20 分) "Let's C" is a popular and fun programming contest hosted b ...
- JAVA写接口傻瓜(#)教程(四)
接上篇 7.sevlert 啊啊啊终于写到最重要的实现部分了.Servlet = Service + Applet,表示小服务程序.Servlet 是在服务器上运行的小程序.这个词是在 Java ap ...
- maven打jar包 没有主属性清单
使用mvn clean package命令打包,java -jar 命令运行时,提示:“jar 包没有主属性清单”.修改pom文件后解决: <build> <plugins> ...