Filter过滤器与Session会话跟踪技术

Filter过滤器

适用场景

1.为web应用程序的新功能建立模型(可被添加到web应用程序中或者从web应用程序中删除而不需要重写基层应用程序代码)
2.用户授权Filter:负责检查用户请求,根据请求过滤用户非法请求
3.日志Filter:详细记录用户的特殊请求
4.负责解码Filter:包括对非标准解码的请求解码
5.XSLT Filter:能改变XML内容

用途

1.在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest,根据需要检查HttpServletRequest,可以修改HttpServletRequest头和数据
2.在HttpServletResponse到达客户端之前,拦截HttpServletResponse,根据需要检查HttpServletResponse,可以修改HttpServletResponse头和数据

Servlet Filter在controller之前检查并修改请求和响应的内容
一个Filter可负责拦截多个请求或者响应,一个请求或响应也可被多个请求拦截

Filter创建步骤

1.创建Filter类,实现javax.servlet.Filter接口的三个方法:
  void init(FilterConfig config); // 用于完成Filter的初始化
  void destroy(); //用于Filter销毁前,完成一些资源的回收
  // 实现过滤功能,对每个请求以及响应增加的额外处理
  void doFilter(ServletRequest request, ServletResponse response, FilterChain chain);
2.在web.xml文件中配置Filter,或者直接使用注解

采用注解的程序例子:

 1 /**
 2  * Description: 设置request的编码集,并验证用户是否登录
 3  */
 4 // 注解
 5 @WebFilter(filterName = "loginFilter",
 6     urlPatterns = {"/*"},    // 该Filter拦截该项目下的所有用户请求
 7     initParams = {    // 配置Filter初始化参数
 8         @WebInitParam(name="encoding", value="utf8"),
 9         @WebInitParam(name="loginPage", value="/login.jsp")})
10 public class LoginFilter implements Filter {
11
12     // 用于访问Filter的配置信息
13     private FilterConfig config;
14
15     @Override
16     public void init(FilterConfig filterConfig) throws ServletException {
17         this.config = filterConfig;
18     }
19
20     @Override
21     public void destroy() {
22         this.config = null;
23     }
24
25     @Override
26     public void doFilter(ServletRequest servletRequest,
27         ServletResponse servletResponse, FilterChain chain)
28         throws IOException, ServletException {
29         // 获取Filter的配置参数
30         String encoding = config.getInitParameter("encoding");
31         String loginPage = config.getInitParameter("loginPage");
32
33         // 设置request编码用的字符集
34         servletRequest.setCharacterEncoding(encoding);
35         // 将ServletRequest请求转换成HttpServletRequest请求
36         HttpServletResquest request = (HttpServletRequest) servletRequest;
37         // 获取客户请求的页面
38         String requestPath = request.getServletPath();
39         // 判断用户是否登录
40         HttpSession session = request.getSession();
41         // 若没有,且访问页面不是登录页面
42         if (session.getAttribute("user") == null && !requestPath.endsWith(loginPage)){
43             // 转发到登录页面
44             request.getRequestDispatcher("/jsp/login.jsp").forward(servletRequest, servletResponse);
45         }
46         else{
47             // 放行
48             chain.doFilter(servletRequest, servletResponse);
49         }
50     }
51
52 }

如果不用注解的方式,需要在web.xml中配置自定义的拦截器:

 1 <filter>
 2     <filter-name>loginFilter</filter-name>
 3     <filter-class>filter.LoginFilter</filter-class>
 4     <init-param>
 5         <param-name>encoding</param-name><param-value>utf8</param-value>
 6         <param-name>loginPage</param-name><param-value>/login.jsp</param-value>
 7     </init-param>
 8 </filter>
 9 <filter-mapping>
10     <filter-name>loginFilter</filter-name>
11     <url-pattern>/*</url-pattern>
12 </filter-mapping>

如果有多个拦截器,拦截会按照从上至下的顺序进行拦截,一般来说处理编码的拦截器配置在最上面。

有了上述步骤的操作,就可以通过URI进行访问。
此时如果能够取得Session中的logined值时,会直接进入下一步处理,否则直接进入登录页面。从而完成session的校验。

参考源:https://blog.csdn.net/wtopps/article/details/72870356
    https://blog.csdn.net/qq_23835497/article/details/79626197

Session会话

定义

Session代表服务器与浏览器的一次会话过程,过程可以是连续的,也可以是时断时续的。

作用

Session是为了保持用户访问服务器的交互状态。
Session机制是一种服务器的机制。当程序需要为客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已经包含一个session id。
如果已经包含session id,说明以前已经为此客户创建过session,服务器就按照session id把session检索出来使用。如果客户请求里不含session id,则为此客户创建一个session,并且生成一个与此session相关联的session id,此session id将在本次响应中返回给客户端保存。

创建时机

session在有客户端访问时并没有被创建,直到server端程序(如Servlet)调用HttpServletRequest.getSession()/HttpServletRequest.getSession(true)此类语句时才会被创建。

删除时机

session在以下情况被删除:
1.程序调用HttpSession.invalidate()
2.距离上一次收到客户端发送的session id时间间隔超过了session的最大有效时间
3.服务器进程被停止

参考源:https://blog.csdn.net/canot/article/details/50667793
    https://blog.csdn.net/pengpenglin/article/details/706095

原文地址:https://www.cnblogs.com/thevilewind/p/9128137.html

时间: 2024-10-11 01:05:06

Filter过滤器与Session会话跟踪技术的相关文章

Cookie&amp;Session会话跟踪技术

今日内容学习目标 可以响应给浏览器Cookie信息[response.addCookie()] 可以接受浏览器Cookie信息[request.getCookies()] [创建cookie,设置path和Age] 理解cookie的执行原理(重要) 可以对session的作用域数据进行操作:存放,获得,移除 理解session的执行原理(重要) 一,记录用户的上一次访问时间 当用户访问某些WEB应用时,经常会显示出上一次的访问时间.例如QQ登录成功后,会显示上一次的登录时间.通过本案例读者将学

07.会话跟踪技术cookie与session

会话跟踪技术cookie与session 01.会话跟踪:会话路径技术使用Cookie或session完成: 我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的! 无法记录前一次请求的状态.但HTTP协议中可以使用Cookie来完成会话跟踪! 在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术 02.Cookie概述 Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对. 客户端会保存Cookie,并会标注出Cookie的来源(哪个服务

JavaEE基础(04):会话跟踪技术,Session和Cookie详解

本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操作结果才能和登录用户做关联. 2.概念简介 可以把会话理解为客户端与服务器之间的一次交互,在一次交互中可能会包含多次请求和响应.在JavaWeb中,从客户端向服务器发出第一个请求开始,会话就开始了,直到客户端关闭浏览器会话结束.在一个会话的多个请求中共享数据,这就是会话跟踪技术. 二.Cookie用

04-cookies 会话跟踪技术

1.会话跟踪技术 1.Http协议的无状态保存 会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应 2 .会话路径技术使用Cookie或session完成 我们知道HTTP协议是无状态协议,也就是说每个请求都是独立的!无法记录前一次请求的状态. 但HTTP协议中可以使用Cookie来完成会话跟踪!在Web开发中,使用session来完成会话跟踪,session底层依赖Cookie技术. 2.cookie简介 1.什么叫Cookie Cookie翻译成中文是小甜点,小饼干

java中会话跟踪技术

1.什么是会话跟踪技术? 会话跟踪技术,是针对无状态连接中,跟踪用户关键操作的技术. 具体应用场景,是淘宝网中用户登录后购买商品,但是服务器并不能将用户和商品对应起来:因此,需要通过会话跟踪技术来实现追踪定位. 2.java中有四种会话跟踪技术: cookie,session,url重写,隐藏域. cookie: 服务器创建保存于浏览器端,下次用户再访问该站点服务器的时候,保存在用户机器上的cookie信息就被送回给服务器端.一般cookie大小不大于4KB,且用户的敏感信息和账户密码不应该保存

会话跟踪技术

会话跟踪是一种灵活.轻便的机制,它使Web上的状态编程变为可能.HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的.非连续的.当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题.当一个客户在多个页面间切换时,服务器会保存该用户的信息.有四种方法可以实现会话跟踪技术:URL重写.隐藏表单域.Cookie.Session.1).隐藏表单域:<input type="hidden">,

四种会话跟踪技术,JSP的四种范围

这两个问题在网上搜答案是一样的,但是我的宝典里标明这是两个问题,有不同的答案,所以在这里注释一下. 四种会话跟踪技术 cookie,url重写,session,隐藏域 Cookie:服务器在一个应答首部传递给浏览器的名称/值对.浏览器保存的时间由cookie的过期时间属性来指定.当浏览器向某个服务器发送一个请求时,它会检查其保存的cookie,并在请求首部中包含从同一台服务器上接收到的所有cookie. 首次都是通过URL传递的,即在URL后跟一个ID标识.然后会判断客户端是否接受cookie,

四种会话跟踪技术

会话跟踪是一种灵活.轻便的机制,它使Web上的状态编程变为可能.HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的.非连续的.当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题.当一个客户在多个页面间切换时,服务器会保存该用户的信息.有四种方法可以实现会话跟踪技术:URL重写.隐藏表单域.Cookie.Session. 1).隐藏表单域:<input type="hidden">

2.会话跟踪技术

1.什么是会话跟踪技术 我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应.例如你给10086打个电话,你就是客户端,而10086服务人员就是服务器了.从双方接通电话那一刻起,会话就开始了,到某一方挂断电话表示会话结束.在通话过程中,你会向10086发出多个请求,那么这多个请求都在一个会话中. 在JavaWeb中,客户向某一服务器发出第一个请求开始,会话就开始了,直到客户关闭了浏览器会话结束. 在一个会话的多个请求中共享数据,这就是会