过滤器

过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。

如图,浏览器发出的请求先递交给第一个filter进行过滤,符合规则则放行,递交给filter链中的下一个过滤器进行过滤。过滤器在链中的顺序与它在web.xml中配置的顺序有关,配置在前的则位于链的前端。当请求通过了链中所有过滤器后就可以访问资源文件了,如果不能通过,则可能在中间某个过滤器中被处理掉。

在doFilter()方法中,chain.doFilter()前的一般是对request执行的过滤操作,chain.doFilter后面的代码一般是对response执行的操作。过滤链代码的执行顺序如下:

过滤器一般用于登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等操作,便于代码重用,不必每个servlet中还要进行相应的操作。

下面是过滤器的简单应用:

1:创建过滤器

如图,新建一个class,实现接口Filter(注意:是javax.servlet中的Filter)。

2:重写过滤器的doFilter(request,response,chain)方法。另外两个init()、destroy()方法一般不需要重写。在doFilter方法中进行过滤操作。

常用代码有:获取请求、获取响应、获取session、放行。

剩下的代码就是根据session的属性进行过滤操作、设置编码格式等等了,看情况而定。

HttpServletRequest request=(HttpServletRequest) arg0;//获取request对象

HttpServletResponse response=(HttpServletResponse) arg1;//获取response对象

HttpSession session=request.getSession();//获取session对象

过滤操作代码......

chain.doFilter(request, response);//放行,通过了当前过滤器,递交给下一个filter进行过滤

3:在web.xml中配置过滤器。这里要谨记一条原则:在web.xml中,监听器>过滤器>servlet。也就是说web.xml中监听器配置在过滤器之前,过滤器配置在servlet之前,否则会出错。

loginFilter//过滤器名称

com.ygj.control.loginFilter//过滤器类的包路径

//可选

参数名//过滤器初始化参数

参数值

//过滤器映射

loginFilter

指定过滤器作用的对象

在配置中需要注意的有两处:一是指明过滤器类所在的包路径。二是处定义过滤器作用的对象。一般有以下规则:

1:作用与所有web资源:/*。则客户端请求访问任意资源文件时都要经过过滤器过滤,通过则访问文件,否则拦截。

2:作用于某一文件夹下所有文件:/dir/*

3:作用于某一种类型的文件:*.扩展名。比如*.jsp过滤所有对jsp文件的访问请求。

4:作用于某一文件夹下某一类型文件:/dir/*.扩展名

如果一个过滤器需要过滤多种文件,则可以配置多个,一个mapping定义一个url-pattern来定义过滤规则。

loginFilter

com.ygj.control.loginFilter

loginFilter

*.jsp

loginFilter

*.do

例1:用过滤器实现登录验证,没登录则驳回访问请求并重定向到登录页面。

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2) throws IOException, ServletException {

HttpServletRequest request=(HttpServletRequest) arg0;

HttpServletResponse response=(HttpServletResponse) arg1;

HttpSession session=request.getSession();

String path=request.getRequestURI();

Integer uid=(Integer)session.getAttribute("userid");

if(path.indexOf("/login.jsp")>-1){//登录页面不过滤

arg2.doFilter(arg0, arg1);//递交给下一个过滤器

return;

}

if(path.indexOf("/register.jsp")>-1){//注册页面不过滤

arg2.doFilter(request, response);

return;

}

if(uid!=null){//已经登录

arg2.doFilter(request, response);//放行,递交给下一个过滤器

}else{

response.sendRedirect("login.jsp");

}

}

例2:设置字符编码

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest request2=(HttpServletRequest) request;

HttpServletResponse response2=(HttpServletResponse) response;

request2.setCharacterEncoding("UTF-8");

response2.setCharacterEncoding("UTF-8");

chain.doFilter(request, response);

}

java filter param_Java过滤器Filter使用详解相关推荐

  1. Java web—Servlet过滤器(Filter)

    前言:         过滤器是Servlet中一个非常重要的组成部分,进行WEB开发时无不用到过滤器:因此这篇blog来单独总结下关于过滤器的知识点. 一.首先来了解一下什么是过滤器: 下面这句话引 ...

  2. java web工程web.xml配置详解

    转载自:http://blog.csdn.net/believejava/article/details/43229361 这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢 ...

  3. Java自动日志监控框架auto-log详解

    Java自动日志监控框架auto-log详解 1. 需求概述 2. auto-log简介 2.1 auto-log定义 2.2 auto-log目的 2.3 auto-log特性 2.4 注解说明 2 ...

  4. vue如何过滤html标签,Vue过滤器filters使用详解

    这次给大家带来Vue过滤器filters使用详解,Vue过滤器filters使用的注意事项有哪些,下面就是实战案例,一起来看一下. 示例代码 采用vue单文件组件,使用moment插件格式化日期 {{ ...

  5. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

  6. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  7. Java中的异常和处理详解

    Java中的异常和处理详解 参考文章: (1)Java中的异常和处理详解 (2)https://www.cnblogs.com/lulipro/p/7504267.html 备忘一下.

  8. java string()函数_转载java String.split()函数的用法详解

    转载java String.split()函数的用法详解 如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!在java.lang包中有String.split()方法的原型是: p ...

  9. 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

  10. 2016年 第07届 蓝桥杯 Java B组 决赛真题详解及小结

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:大部 ...

最新文章

  1. [译]HTMLCSS Lesson2: 了解HTML
  2. 【原创】Quartus II 实验流程说明书
  3. 常见服务器解析漏洞(IIS,Nginx,Apache)
  4. Win10 Bash\/WSL调试Linux环境下的.NET Core应用程序
  5. LeetCode 1119. 删去字符串中的元音
  6. hp服务器硬盘ultra320,惠普/hp 300GB 1.5万转 3.5寸 SAS服务器硬盘 P/N:431944-B21
  7. 内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解
  8. 南理工计算机学院研究生课程的评价和反思(研一上)
  9. docker 容器数据卷
  10. 求连续数组子序咧的最大和
  11. USB Host读取U盘成功
  12. linux ext4 inode,Ext4文件系统中inode数量的限制
  13. ValueError: You are trying to load a weight file containing 0 layers into a model with 16 layers.
  14. 新能源电动汽车充电桩收费平台
  15. 家用电信光猫更换教程+设置路由模式
  16. 全新版的TFN 光时域反射仪上线了,大家一块了解一下吧。
  17. 访问远程Redis服务。Connect to Remote Redis Server
  18. 线性表(小白,如有错误还望海涵)
  19. 大学物理复习4-保守力(做功)+功能原理+机械能守恒
  20. Visual SourceSafe 2005(VSS2005)与Visual Studio 2005的开发环境搭建

热门文章

  1. 敏捷开发用户故事系列之九:用户故事早期估算
  2. a small test by windows live writer 2011
  3. CFile, read, write,typeBinary
  4. 青岛科技大学C语言程序设计,青岛科技大学c语言试题库
  5. PHP中的错误处理set_error_handler()与trigger_error()的问题
  6. ajaxFileUpload 异步上传文件简单使用
  7. 学习STM32F769DK-OTA例程之APP中断向量表重映射
  8. Codeforces Round #439 (Div. 2)题解
  9. SEAYAR - 思雅,快乐生活
  10. 使用一个DataContext,还是多个?