Java过滤器Filter使用说明

合集下载

Java过滤器Filter使用详解

Java过滤器Filter使用详解

Java过滤器Filter使⽤详解<div id="post_detail">转载请注明原⽂地址:在我的项⽬中有具体应⽤:https:///ygj0930/CoupleSpace过滤器过滤器是处于客户端与服务器资源⽂件之间的⼀道过滤⽹,在访问资源⽂件之前,通过⼀系列的过滤器对请求进⾏修改、判断等,把不符合规则的请求在中途拦截或修改。

也可以对响应进⾏过滤,拦截或修改响应。

如图,浏览器发出的请求先递交给第⼀个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中配置过滤器。

java中的filter中的contains方法

java中的filter中的contains方法

java中的filter中的contains方法1. 引言1.1 概述在Java中,Filter是一种常用的数据处理方式,它可以对集合、数组或字符串进行筛选和过滤操作。

其中,contains方法是Filter类中的一个重要方法之一。

它用于检查目标对象是否包含指定的元素,并返回布尔值以表示是否存在。

1.2 目的本篇文章旨在介绍Java中Filter中的contains方法。

通过阐述该方法的使用场景、参数与返回值说明以及与其他方法的对比分析,读者将深入了解并掌握该方法在实际开发中的应用。

1.3 文章结构本文将围绕以下几个方面展开论述:- 首先,将概述Java中Filter的相关背景知识和技术概念。

- 其次,详细介绍Filter中的contains方法,解释其工作原理和用法。

- 然后,分析contains方法所涉及到的参数以及其返回值,并给出示例代码进行解析。

- 进而,对contains方法与其他相关方法进行比较和对比分析,如startsWith 和endWiths等。

- 最后,总结全文内容并提出存在问题及展望未来可能改进之处,最后给出结语。

通过逐步展示以上章节内容,读者将能够全面了解Java中Filter中contains方法及其相应知识点,并在实际开发中灵活应用和优化这一方法。

2. Java中的Filter简介2.1 Filter概述在Java中,Filter是一种用于处理数据集合的工具,它提供了多种方法来过滤和操作数据。

Filter的主要作用是对集合中的元素进行筛选,只保留满足特定条件的元素。

在Java开发中,经常会遇到需要对数据进行筛选和处理的场景,而Filter正是为此而生。

2.2 Filter中的contains方法简介其中,在Java中的Filter类中,包含了一个常用的方法叫做contains()。

这个方法用于判断一个集合是否包含某个特定元素。

它接收一个参数作为待检查是否存在于集合中的元素,并返回一个布尔值来表示结果。

java使用Filter过滤器对Response返回值进行修改

java使用Filter过滤器对Response返回值进行修改

java使⽤Filter过滤器对Response返回值进⾏修改有时候在开发过程中会有这样⼀个场景,有时需要对返回的数据进⾏处理。

⽐如加密啊,添加某些标记啊等等。

这种情况我们可以通过过滤器去处理。

过滤器是什么就不介绍了,百度⼀下,你就知道。

看看代码吧:返回值输出代理类:这个类主要是为了吧Response⾥⾯的返回值获取到,因为直接Response没有提供直接拿到返回值的⽅法。

所以要通过代理来取得返回值package com.channel.filter;import java.io.ByteArrayOutputStream;import java.io.IOException;import javax.servlet.ServletOutputStream;import javax.servlet.WriteListener;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServletResponseWrapper;/*** 返回值输出代理类** @Title: ResponseWrapper* @Description:* @author kokJuis* @date 上午9:52:11*/public class ResponseWrapper extends HttpServletResponseWrapper{private ByteArrayOutputStream buffer;private ServletOutputStream out;public ResponseWrapper(HttpServletResponse httpServletResponse){super(httpServletResponse);buffer = new ByteArrayOutputStream();out = new WrapperOutputStream(buffer);}@Overridepublic ServletOutputStream getOutputStream()throws IOException{return out;}@Overridepublic void flushBuffer()throws IOException{if (out != null){out.flush();}}public byte[] getContent()throws IOException{flushBuffer();return buffer.toByteArray();}class WrapperOutputStream extends ServletOutputStream{private ByteArrayOutputStream bos;public WrapperOutputStream(ByteArrayOutputStream bos){this.bos = bos;}@Overridepublic void write(int b)throws IOException{bos.write(b);}@Overridepublic boolean isReady(){// TODO Auto-generated method stubreturn false;}@Overridepublic void setWriteListener(WriteListener arg0){// TODO Auto-generated method stub}}}过滤器类:package com.channel.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;import com.channel.util.RsaEncryptUtil;/*** 返回值输出过滤器,这⾥⽤来加密返回值** @Title: ResponseFilter* @Description:* @author kokJuis* @date 上午9:52:42*/public class ResponseFilter implements Filter{@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)throws IOException, ServletException{ResponseWrapper wrapperResponse = new ResponseWrapper((HttpServletResponse)response);//转换成代理类 // 这⾥只拦截返回,直接让请求过去,如果在请求前有处理,可以在这⾥处理filterChain.doFilter(request, wrapperResponse);byte[] content = wrapperResponse.getContent();//获取返回值//判断是否有值if (content.length > 0){String str = new String(content, "UTF-8");System.out.println("返回值:" + str);String ciphertext = null;try{//......根据需要处理返回值}catch (Exception e){e.printStackTrace();}//把返回值输出到客户端ServletOutputStream out = response.getOutputStream();out.write(ciphertext.getBytes());out.flush();}}@Overridepublic void init(FilterConfig arg0)throws ServletException{}@Overridepublic void destroy(){}}配置很简单:spring boot:/*** 配置过滤器,这⾥过滤器主要是对返回值做后继处理** @return*/@Beanpublic FilterRegistrationBean someFilterRegistration(){FilterRegistrationBean registration = new FilterRegistrationBean();registration.setFilter(new ResponseFilter());// 配置⼀个返回值加密过滤器 registration.addUrlPatterns("/*");registration.addInitParameter("paramName", "paramValue");registration.setName("responseFilter");return registration;}spring mvc 下直接在web.xml下添加配置即可<!-- 返回值过滤器 --><filter><filter-name>responseFilter</filter-name><filter-class>com.im.filter.ResponseFilter</filter-class></filter><filter-mapping><filter-name>responseFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>。

java filter数组用法

java filter数组用法

文章标题:深度解析Java中Filter数组的用法1. 简介在Java编程中,Filter数组是一种常用的概念。

它可以对数组中的元素进行筛选,从而快速过滤出符合条件的元素。

本文将深入探讨Java中Filter数组的用法,帮助读者更好地理解和应用这一概念。

2. Filter数组的基本概念在Java中,Filter数组是指通过某种条件来筛选出数组中符合条件的元素,通常使用Lambda表达式或者匿名内部类来实现。

这种方式能够方便快速地对数组进行筛选,提高了代码的可读性和易用性。

3. Filter数组的使用方法3.1. 使用Lambda表达式在Java 8及以上的版本中,可以使用Lambda表达式来实现Filter数组的筛选功能。

通过对数组中的元素逐个应用Lambda表达式中定义的条件,可以快速过滤出符合条件的元素。

3.2. 使用匿名内部类在早期的Java版本中,可以使用匿名内部类来实现Filter数组的筛选功能。

虽然语法稍显繁琐,但同样可以达到筛选的效果。

4. Filter数组的深入理解4.1. 灵活运用条件判断当使用Filter数组时,需要灵活地定义条件判断,以保证筛选出符合特定要求的元素。

这需要对Lambda表达式或匿名内部类的编写有一定的功底。

4.2. 筛选算法的优化在实际应用中,对Filter数组的筛选算法进行优化是非常重要的。

通过合理的算法设计和数据结构选择,可以提高筛选的效率和准确性。

5. 个人观点和理解5.1. 对于我来说,Filter数组是Java编程中非常重要的一个概念。

它不仅提高了代码的可读性和易用性,还为我们提供了一种便捷的数组筛选方式。

5.2. 在实际项目中,我曾经使用Filter数组来筛选大量的数据,经过优化后,取得了很好的效果。

我对Filter数组的理解和应用都比较深入。

6. 总结通过本文的讲解,读者对Java中Filter数组的基本概念、使用方法以及深入理解都有了全面的了解。

java 中filter过滤器使用方法

java 中filter过滤器使用方法

Java 中filter 过滤器的使用:Servlets Filter 是Servlet 2.3 规范中新增加的,它是截取用户从客户端提交的请求,在还没有到达需要访问的资源时运行的一个类。

它操纵来自客户端的请求,在资源还没有初发送到客户端前截取响应,并处理这些还没有发送到客户端的响应。

Filters 有许多的应用场合。

Servlet 2.3 规范建议如下的地方可以应用Filter:authentication filterslogging and auditing filtersimage conversion filtersdata compression filtersencryption filterstokenizing filtersfilters that trigger resource access eventsXSL/T filters that transform XML contentMIME-type chain filters如何实现一个过滤器呢?1.所在的类实现Filter接口public interface Filterpublic void init(FilterConfig filterConfig)throws ServletException过滤器初始化是在容器启动时自动初始化public void doFilter(ServletRequest request,ServletResponse response,FilterChainchain)throws IOException,ServletExcepton在标准Servlet中的doGet或doPost 方法中,传递参数为:HttpServletRequest、HttpServletResponse过滤器销毁public void destroy()例:如下为过滤器基本的主要结构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;public class MyFirstFilter implements Filter{private String encoding;public void destroy(){System.out.println("过滤器销毁");}public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {System.out .println("过滤doFilter");chain.doFilter(request, response);}public void init(FilterConfig filterConfig) throws ServletException {System.out .println("过滤器初始化"); encoding = filterConfig.getInitParameter("encoding"}对应配置文件:<filter ><filter-name >encodingFilter </filter-name ><filter-class >com.shen.test.filter. MyFirstFilter </filter-class ><init-param ><param-name >encoding </param-name ><param-value >Shift_JIS </param-value ></init-param ></filter ><filter-mapping ><filter-name >encodingFilter </filter-name ><servlet-name >action </servlet-name ></filter-mapping ><servlet ><init-param ><<param-value >/WEB-INF/config/struts-config.xml,/WEB-INF/config/st ruts-config-contents.xml </param-value ></init-param ><init-param><param-name>debug</param-name><param-value>2</param-value></init-param><init-param><param-name>detail</param-name><param-value>2</param-value></init-param><load-on-startup>1</load-on-startup></servlet>如果过滤器要将内容传递到目的地,则需要FilterChain,将请求继续向下转发过滤器也会执行两次:FilterChain之前执行一次,之后再执行一次2:对某些文字进行过滤关键方法如下所示:public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("过滤doFilter");//从页面获取内容String content=request.getParameter("content");String filterchar ="色";if(content != null && !"".equals(content)){//如果indexOf返回-1则表示没有查到所要的内容if(-1 == content.indexOf(filterchar)){chain.doFilter(request, response);}else{System.out.println("有非法文字");//可以继续做处理//如果需要的话,此处依然可以使用RequestDispatcher进行跳转}}}3:设置统一编码/*** 对内容进行统一的编码*/request.setCharacterEncoding("GBK");response.setCharacterEncoding("GBK");4:登录验证:/*** 登陆验证*/public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {/*** 登陆验证*///Session属于http范畴,把以ServletRequest对象需要先转换成HttpServletRequest对象HttpServletRequest hrequest =(HttpServletRequest) request;HttpSession session =hrequest.getSession();//request.getScheme();request.getServerName();request.getServerPo rt();//如果session不为空,则可以浏览其它页面if(null != session.getAttribute("username")){chain.doFilter(request, response);}else{//通过requestDispatcher跳转到登陆面request.getRequestDispatcher("login.jsp").forward(request,respons e);}}第二部分:javax.servlet.Filter详细介绍:过滤器(Filter)位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应。

java中streamfilter的用法

java中streamfilter的用法

文章标题:深入探讨Java中Stream.filter的灵活应用在Java编程中,Stream是一个非常强大且灵活的API,它提供了一种新的抽象来处理集合数据。

而在Stream中,filter方法则是一个十分重要且常用的操作,它能够根据指定的条件筛选出符合要求的元素。

本文将对Java中Stream.filter的用法进行深入探讨,帮助读者更全面地理解这一功能。

1. Stream.filter的基本用法在Java中,Stream.filter方法用于筛选出满足指定条件的元素,并将其放入一个新的Stream中。

其基本用法如下:```javaStream<T> filter(Predicate<? super T> predicate)```这里的Predicate是一个函数式接口,用于定义筛选条件。

当Stream 的元素满足Predicate中定义的条件时,就会被包含在新的Stream中。

通过filter方法,我们可以轻松地实现数据的筛选和过滤。

2. 深入理解Predicate接口在使用filter方法时,我们需要传入一个Predicate对象来定义筛选条件。

Predicate是一个函数式接口,它只有一个抽象方法test,用于对输入的参数进行条件判断。

我们可以通过Lambda表达式或者匿名类来实现Predicate接口,从而定义不同的筛选条件。

我们可以这样定义一个筛选条件:```javaPredicate<Integer> isEven = num -> num % 2 == 0;```这个筛选条件表示筛选出偶数。

通过将这个条件传入filter方法,我们就可以筛选出Stream中的偶数元素。

3. 灵活应用filter方法除了基本的条件筛选外,filter方法还可以与其他Stream操作配合,实现更加灵活和复杂的功能。

我们可以先对Stream进行映射,然后再进行条件筛选:```javaList<String> names = Arrays.asList("Alice", "Bob", "Cindy", "David");List<String> result = names.stream().map(String::toUpperCase).filter(name -> name.startsWith("A")).collect(Collectors.toList());```在这个例子中,我们先将原始的名字列表转换为大写形式,然后再筛选出以“A”开头的名字,最终将筛选结果收集到一个新的List中。

java-过滤器Filter_多个Filter的执行顺序

java-过滤器Filter_多个Filter的执行顺序

java-过滤器Filter_多个Filter的执⾏顺序【Filter链】*在⼀个web应⽤中,可以开发编写多个Filter,这些Filter组合起来称为⼀个Filter链。

*web服务器根据Filter在web.xml中的注册顺序,决定先调⽤哪个Filter,当第⼀个Filter的doFilter⽅法被调⽤时,web服务器会创建⼀个代表Filter链的FilterChain对象传递给该⽅法,在doFilter⽅法中,开发⼈员如果调⽤了FilterChain对象的doFilter⽅法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调⽤第⼆个filter,如果没有,则调⽤⽬标资源。

【⼯程截图】设计了两个Filter和⼀个Servlet,访问Servlet时,查看Filter的执⾏顺序。

【web.xml】<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="/2001/XMLSchema-instance" xmlns="/xml/ns/javaee" xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" <display-name>FilterDemo01</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- 过滤顺序:谁的写在上⾯,谁先被过滤 --><filter><filter-name>FilterTest01</filter-name><filter-class>com.Higgin.web.filter.FilterTest01</filter-class></filter><filter-mapping><filter-name>FilterTest01</filter-name><url-pattern>/*</url-pattern> <!-- 过滤所有 --></filter-mapping><filter><filter-name>FilterTest02</filter-name><filter-class>com.Higgin.web.filter.FilterTest02</filter-class></filter><filter-mapping><filter-name>FilterTest02</filter-name><url-pattern>/*</url-pattern> <!-- 过滤所有 --></filter-mapping></web-app>【FilterTest01.java】package com.Higgin.web.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;public class FilterTest01 implements Filter{@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {System.out.println("FilterTest01 执⾏前---");chain.doFilter(request, response);//让⽬标资源执⾏,即:放⾏System.out.println("FilterTest01 执⾏后---");}@Overridepublic void init(FilterConfig arg0) throws ServletException {}@Overridepublic void destroy() {}}【FilterTest02.java】package com.Higgin.web.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;public class FilterTest02 implements Filter{@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {System.out.println("FilterTest02 执⾏前---");chain.doFilter(request, response); //放⾏System.out.println("FilterTest02 执⾏后---");}@Overridepublic void init(FilterConfig arg0) throws ServletException {}@Overridepublic void destroy() {}}【ServletTest01.java】package com.Higgin.web.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class ServletTest01*/@WebServlet("/ServletTest01")public class ServletTest01 extends HttpServlet {private static final long serialVersionUID = 1L;public ServletTest01() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //response.getWriter().write("中国加油!China Come on!");System.out.println("执⾏ServletTest01---");}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response);}}【运⾏结果】在浏览器中输⼊:http://localhost:8080/FilterDemo01/ServletTest01查看控制台输出结果⾃⼰可以尝试分别注释FilterTest01和FilterTest02中的chain.doFilter⽅法,⽤Junit查看具体的执⾏过程。

java流的filter函数的用法

java流的filter函数的用法

java流的filter函数的用法在Java中,filter函数是Stream API的一部分,它用于根据某种条件过滤元素。

这是使用filter函数的基本语法:java复制代码stream.filter(Predicate<? super T>predicate)这里,stream是一个输入的Stream对象,predicate是一个用于过滤元素的函数式接口。

这个接口只有一个方法,即test(T t),返回一个布尔值。

以下是一个具体的例子,假设我们有一个整数列表,我们希望过滤出所有的偶数:java复制代码List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());在这个例子中,我们创建了一个Stream对象,然后使用filter 函数过滤出所有的偶数。

n -> n % 2 == 0是一个Lambda表达式,代表了一个匿名函数,该函数接受一个整数参数n,并返回一个布尔值。

collect方法将结果收集到一个新的列表中。

你也可以使用方法引用进行过滤,例如上述的例子可以改写为:java复制代码List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());在这个例子中,我们使用了方法引用来过滤偶数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java 过滤器1. 过滤器的产生背景在基于JSP 页面开发的Web 项目中,会遇到一种情况,除了登陆页面或者注册页面以外,其它页面在用户未登陆的情况下是不允许访问的。

对用户身份的验证是基于session 实现的,即在登陆成功后在session 中放入标识,当用户再次访问其它页面时,根据session 的标识来确认用户是否可以访问。

这样的话,在很多页面中都需要添加判断代码,同样代码的重复增加了多余的代码,不符合Java 编程习惯且不利于维护。

而过滤器的产生解决了这一问题。

2. 过滤器的实现使用Servlet 过滤器实现JSP 页面中的用户身份验证,首先必须实现Filter 接口,且重写doFilter()方法,由doFilter()方法去处理过滤业务;其次,在web.xml 文件中配置Servlet 过滤器,指定过滤器的名称、过滤器包所在类的名称及过滤器的映射范围等。

3. 过滤器的介绍3.1 Servlet 过滤器接口的构成所有的Servlet 过滤器都必须实现javax.servlet.filter 接口,该接口中定义了3个过滤器必须实现的方法:void init(FilterConfig):过滤器的初始化方法,Servlet 容器在创建过滤器实例时调用这个方法,在这个方法中可以读出在web.xml 文件中为该过滤器配置的初始化参数。

void doFilter(ServletRequest,ServletResponse,FilterChain):用于完成实际的过滤操作,当客户请求访问与过滤器相关联的URL 时,Servlet 容器将先调用过滤器的这个方法,FilterChain 参数用于访问后续过滤器。

void destroy():过滤器在被取消前执行这个方法,释放过滤器申请的资源。

3.2创建一个Servlet 过滤器需要下面的步骤: 1.创建一个实现了javax.servlet.Filter 接口的类。

2.重写init(FilterConfig)方法,读入为过滤器配置的初始化参数,申请过滤器需要的资源3.重写方法doFilter(ServletRequest,ServletResponse,FilterChain),完成过滤操作,可以从ServletRequest 参数中得到全部的请求信息,从ServletResponse 参数中得到全部的响应信息。

4.在doFilter()方法的最后,使用FilterChain 参数的doFilter()方法将请求和响应后传。

5.对响应的Servlet 程序和JSP 页面注册过滤器,在部署描述文件(web.xml)中使用<filter-apping>和<filter>元素对过滤器进行配置。

用户(浏览器)服务器端页面过滤器请求响应服务器端4.Java代码①新建Java类,实现Filter接口package com;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.HttpSession;public class LoginFilter implements Filter {private String times;@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//通过判断session中标识确定用户身份,若无则让其访问登陆页面或进行其它操作//若需要用到session,可用以下方法得到HttpServletRequest req = (HttpServletRequest)request;HttpSession session = req.getSession();chain.doFilter(request, response);//若判断用户为已登录,调用此方法,让用户访问页面//此处为服务器响应后的操作}@Overridepublic void init(FilterConfig config) throws ServletException {this .times = config.getInitParameter("times");//从配置文件中读出设置的参数 }}② 在web.xml 中进行配置<?xml version ="1.0" encoding ="UTF-8"?> <web-appweb-app version ="2.5"xmlns ="/xml/ns/javaee"xmlns:xsi ="/2001/XMLSchema-instance"xmlns:web ="/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation ="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"> <filter > <filter-name >LoginFilter </filter-name ><filter-class >com.LoginFilter </filter-class > <init-param ><param-name >times </param-name ><param-value >1000</param-value ></init-param ></filter ><filter-mapping > <filter-name >LoginFilter </filter-name > <url-pattern >*.do </url-pattern ><!-- 设置需要过滤的url 请求路径,有三种写法1,完全匹配 <url-pattern>/test/list.do</url-pattern> 即指定的url2,目录匹配 <url-pattern>/test/*</url-pattern> 即/test/下的所有url 3,扩展名匹配 <url-pattern>*.do</url-pattern> 所有以".do"结尾的url --><url-pattern >*.jsp </url-pattern ><!-- 可以设置多个匹配 --></filter-mapping ></web-app >自定义名字,只需要保证两者一致即可,一般采用类名过滤器的包名+类名5.Demo(网上找的一个实例,禁止未授权的IP访问站点)使用过滤器禁止未授权的IP访问站点是过滤器常见的应用,本例演示了如何利用过滤器实现禁止未授权的IP访问站点。

1.编写过滤器类IPFilter.javapackage com;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class IPFilter implements Filter {private String filterIP, error;public FilterConfig config;@Overridepublic void init(FilterConfig filterConfig) throws ServletException { this.config = filterConfig;filterIP = config.getInitParameter("IP");if (filterIP == null)filterIP = "";error = config.getInitParameter("ERROR");if (error == null)error = "error.jsp";}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { RequestDispatcher dispatcher = request.getRequestDispatcher("ErrorInfo.jsp");String remoteIP = request.getRemoteAddr();// 得到客户的IP地址if (remoteIP.equals(filterIP)) {dispatcher.forward(request, response);return;} elsechain.doFilter(request, response);}@Overridepublic void destroy() {config = null;}}在这个过滤器中,在doFilter()方法内,通过request对象得到客户端的IP地址,如果客户端的IP是被禁止的IP,则使用request对象将请求转发给一个出错页面。

相关文档
最新文档