`
forlab
  • 浏览: 134904 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java Web笔记 – Servlet中的Filter过滤器的介绍和使用 编写过滤器

 
阅读更多
1、过滤器介绍:

在Servlet规范2.3中定义了过滤器,它能够对Servlet容器的请求和响应对象进行检查和修改。

Servlet过滤器本身并不生成请求和响应对象,只是提供过滤功能。

Servlet过滤器能够在Servlet被调用之前检查Request对象,并修改Request Header和Request内容;

Servlet被调用之后检查Response对象,修改Response Header和Response的内容。

Servlet过滤器可以过滤的Web组件包括Servlet,JSP和HTML等文件。

Filter类似于IO中的过滤流,实现也类似于Servlet。

2、Filter接口:

所有的Servlet过滤器都必须实现javax.servlet.Filter接口,并实现该接口中的三个方法:

init(FilterConfig filterConfig)

Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用该方法。该方法将读取web.xml文件中Servlet过滤器的初始化参数。

doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。

这里的ServletRequest和ServletResponse一般需要转换成具体的Servlet实现对于的对象,如:HttpServletRequest和HttpServletResponse。

destroy()

Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。

public interface Filter
A filter is an object that performs filtering tasks on either the request to a resource (a servlet or static content), or on the response from a resource, or both. 

Filters perform filtering in the doFilter method. Every Filter has access to a FilterConfig object from which it can obtain its initialization parameters, a reference to the ServletContext which it can use, for example, to load resources needed for filtering tasks.
Filters are configured in the deployment descriptor of a web application
Examples that have been identified for this design are
1) Authentication Filters
2) Logging and Auditing Filters
3) Image conversion Filters
4) Data compression Filters
5) Encryption Filters
6) Tokenizing Filters
7) Filters that trigger resource access events
8) XSL/T filters
9) Mime-type chain Filter
public interface FilterChain
A FilterChain is an object provided by the servlet container to the developer giving a view into the invocation chain of a filtered request for a resource. Filters use the FilterChain to invoke the next filter in the chain, or if the calling filter is the last filter in the chain, to invoke the resource at the end of the chain.
2.1、FilterConfig的使用:

Filter的init方法中提供了一个FilterConfig对象,提供相关的操作:

如获取Filter中配置的初始化参数:
<filter>
      <filter-name>LoginFilter</filter-name>
      <filter-class>com.itzhai.login.LoginFilter</filter-class>
      <init-param>
          <param-name>username</param-name>
          <param-value>arthinking</param-value>
      </init-param>
  </filter>

在init方法中获取:

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    //获取Filter初始化参数
    String username = filterConfig.getInitParameter("username");
}
2.2、在Filter中访问application:
ServletContext context = filterConfig.getServletContext();

也可以在doFilter方法中根据转换好的request获取:

HttpServletRequest req = (HttpServletRequest)request;
ServletContext context = req.getSession().getServletContext();
3、一个简单过滤器的实现:

编写Filter过滤器:

public class LoginFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init LoginFilter");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //把ServletRequest和ServletResponse转换成真正的类型
        HttpServletRequest req = (HttpServletRequest)request;
        HttpSession session = req.getSession();

        //由于web.xml中设置Filter过滤全部请求,可以排除不需要过滤的url
        String requestURI = req.getRequestURI();
        if(requestURI.endsWith("login.jsp")){
            chain.doFilter(request, response);
            return;
        }

        //判断用户是否登录,进行页面的处理
        if(null == session.getAttribute("user")){
            //未登录用户,重定向到登录页面
            ((HttpServletResponse)response).sendRedirect("login.jsp");
            return;
        } else {
            //已登录用户,允许访问
            chain.doFilter(request, response);
        }
    }

    @Override
    public void destroy() {
        System.out.println("destroy!!!");
    }
}

在web.xml中配置Filter:

<filter>
      <filter-name>LoginFilter</filter-name>
      <filter-class>com.itzhai.login.LoginFilter</filter-class>
  </filter>

  <filter-mapping>
      <filter-name>LoginFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

注意:一般Filter配置在所有的Servlet之前。

4、过滤敏感词汇的Filter简单实现:
@Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //转换成实例的请求和响应对象
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse resp = (HttpServletResponse)response;
        //获取评论并屏蔽关键字
        String comment = req.getParameter("comment");
        comment = comment.replace("A", "***");
        //重新设置参数
        req.setAttribute("comment", comment);
        //继续执行
        chain.doFilter(request, response);
    }
5、Filter的执行顺序

Filter的执行顺序与在web.xml配置文件中的配置顺序一致,一般把Filter配置在所有的Servlet之前。

分享到:
评论

相关推荐

    过滤器笔记整理

    过滤器(Filter)是一种轻量级的、可扩展的应用程序组件,它可以在客户端请求到达目标资源(如Servlet、JSP等)之前对其进行预处理,或者在请求处理完毕后对响应进行后处理。这种机制为开发者提供了极大的灵活性,...

    jsp老师的资料有servlet,和过滤器

    2. **过滤器(Filter)**: 过滤器是Java Web应用中的另一种重要组件,它允许开发者在请求到达目标资源(如Servlet或JSP页面)之前和之后进行拦截处理。过滤器通过实现`javax.servlet.Filter`接口并配置在web.xml文件...

    java核心技术-java中监听器和过滤器的使用笔记

    Java核心技术中的监听器和过滤器是Web开发中的关键组件,主要应用于Servlet容器中,用于增强应用程序的功能和控制请求与响应的处理流程。本篇将详细阐述Java中的Filter(过滤器)及其使用方法。 1. **Filter(过滤...

    java web学习笔记

    Java Web是Java编程语言在Web环境中的应用,主要涉及到服务器端编程,包括Servlet、JSP、过滤器、监听器等核心概念。这些组件共同构成了Java Web应用程序的基础架构,用于接收和处理客户端(通常是浏览器)发送的...

    15_尚硅谷_Filter过滤器_王振国 - 课堂笔记1

    在实现 Filter 过滤器时,需要编写一个类去实现 Filter 接口,实现过滤方法 doFilter(),然后到 web.xml 中去配置 Filter 的拦截路径。下面是一个简单的示例代码: public class AdminFilter implements Filter { ...

    web服务器三大组件servlet、Filter、Listener——浅浅笔记

    Web服务器中的三大组件,即Servlet、Filter和Listener,是构建动态Web应用程序的关键元素。这些组件都是基于Java的,主要用于增强和扩展Web服务器的功能。 Servlet是Java中用于处理HTTP请求的核心组件,它是动态...

    java web 学习笔记

    Java Web学习笔记主要涵盖的是与开发Web应用程序相关的Java技术,包括Servlet、JSP、过滤器、监听器、MVC框架(如Spring MVC)、会话管理、请求和响应处理、数据库连接以及各种工具的使用等。这里我们将深入探讨这些...

    web学习笔记 —— 过滤器

    本文将深入探讨过滤器的概念、工作原理以及如何在Java Web应用程序中使用过滤器。 过滤器是Servlet规范的一部分,它通过实现javax.servlet.Filter接口来创建。这个接口定义了三个主要方法:doFilter、init和destroy...

    韩顺平servlet笔记.rar下载

    韩顺平老师的Servlet笔记是对这一技术的深入讲解,旨在帮助学习者掌握Servlet的使用和概念。以下是对Servlet技术的详细说明: 1. **Servlet简介**:Servlet是Java Servlet API的实现,它提供了一种标准的方式来扩展...

    Filter过滤器笔记1

    在Java Web开发中,Filter过滤器是一种强大的工具,它属于JavaEE规范中的重要组成部分,与Servlet程序、Listener监听器并称为三大组件。Filter的主要职责是拦截客户端的请求和服务器的响应,从而实现数据过滤、权限...

    JAVA WEB学习笔记

    - Filter是Java Web中的一个组件,可以拦截和处理请求和响应,实现过滤功能,如权限控制、GZIP压缩等。 - Listener监听器用于监听特定的事件,如session创建、销毁,或者ServletContext的变化。 5. **Java Web...

    java web 笔记

    这份笔记可能包括了Servlet、JSP、MVC模式、JavaBean、过滤器、监听器等多个关键概念。 1. **Servlet**:Servlet是Java平台上的一个标准接口,用于扩展服务器的功能。它允许开发者创建动态响应的Web应用。Servlet...

    java web笔记

    Java Web开发笔记通常涉及Java技术栈中的Web应用开发,以及与之相关的各种组件和配置。在Java Web项目中,Maven的依赖管理是一个重要知识点,它帮助开发者管理项目中的依赖项。Maven的Dependency Scope定义了依赖项...

    Java_Web开发内幕 笔记

    在Java Web开发中,过滤器(Filter)和监听器(Listener)是两个重要的组件。过滤器可以拦截请求和响应,对数据进行预处理或后处理,比如字符编码转换、安全过滤等。监听器则用于监听特定的事件,如session创建、...

    java web课程笔记总结

    根据提供的标题、描述和部分上下文内容,我们可以推断出这份“Java Web课程笔记总结”是一份关于Java Web开发的学习资料。尽管实际的文字内容没有给出,但基于标题和描述中的关键词,我们可以归纳出一系列重要的Java...

    MLDN——Java Web 开发实战经典源码笔记(基础篇)|

    6. **过滤器和监听器**:介绍Filter接口和Listener接口的使用,它们可以用于拦截请求、响应,以及监听应用程序的特定事件。 7. **会话管理**:讲解如何在Web应用中管理和跟踪用户会话,包括Cookie和Session的使用。...

    JSP Servlet 学习笔记源码

    JSP(JavaServer Pages)和Servlet是Java Web开发中的核心技术,它们主要用于构建动态网页和Web应用程序。本学习笔记源码提供了全面的学习资源,涵盖了这两个技术的基础到高级应用,旨在帮助开发者深入理解并熟练...

    jsp/servlet个人学习笔记

    在 `web.xml` 文件中,开发者可以配置 JSP 页面、Servlet、过滤器和监听器的行为,以及定义 URL 映射、错误处理等。它是整个 Web 应用的配置中心。 9. **常见错误** 在 JSP 和 Servlet 开发中,常见的错误包括...

    JSP&Servlet学习笔记.pdf

    在学习JSP和Servlet时,经常会涉及到一些重要的概念和知识点,例如:会话管理(session管理)、请求分发(request dispatcher)、过滤器(filter)、监听器(listener)、JSP标准标签库(JSTL)以及表达式语言(EL)...

Global site tag (gtag.js) - Google Analytics