`
flynewton
  • 浏览: 62579 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Servlet中的filter过滤器

阅读更多

关键字: servlet , filter , 过滤器 , 权限控制

转载并修改自:

  http://blog.csdn.net/lip009/archive/2006/10/17/1337730.aspx       http://tech.sina.com.cn/s/2009-11-19/00471138968.shtml

@Servlet里的过滤器的主要作用

1,任何系统或网站都要判断用户是否登录。

2,网络聊天系统或论坛,功能是过滤非法文字

3,统一解决编码

@Servlet3.0之前怎么创建一个过滤器

1,生成一个普通的class类,实现Filter接口(javax.servlet.Filter)

2,重写接口里面的三个方法:init,doFilter,destroy。

   其中的doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。

3,然后在web.xml配置过滤器。

具体例子:1.首先写一个权限过滤filter类,实现Filter接口

 import  javax.servlet.Filter;
 import  javax.servlet.FilterConfig;
 import  javax.servlet.ServletException;
 import  javax.servlet.ServletRequest;
 import  javax.servlet.ServletResponse;
 import  javax.servlet.FilterChain;
 import  java.io.IOException;
 import  javax.servlet.http.HttpServletRequest;
 import  javax.servlet.http.HttpSession;
 import  javax.servlet.http.HttpServletResponse;

 public   class  RightFilter
    
 implements  Filter  {
  
public void init(FilterConfig filterConfig) throws ServletException {
  }


  
public void doFilter(ServletRequest request, ServletResponse response,
                       FilterChain chain) 
throws IOException, ServletException {
    HttpServletRequest req 
= (HttpServletRequest) request;
     //如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法
     //就要把此request对象构造成HttpServletRequest
    HttpServletResponse res 
= (HttpServletResponse) response;
    
    HttpSession session 
= req.getSession(true);

    
//从session里取的用户名信息
    String username = (String) session.getAttribute("username");
    
    
//判断如果没有取到用户信息,就跳转到登陆页面
    if (username == null || "".equals(username)) {
      
//跳转到登陆页面
      res.sendRedirect("http://"+req.getHeader("Host")+"/login.jsp");
    }

    
else {
      
//已经登陆,继续此次请求
      chain.doFilter(request,response);
       //调用FilterChain对象的doFilter方法
       //Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数
       //在调用此对象的doFilter方法时,激活下一个相关的过滤器
       //如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活
    }

  }


  
public void destroy() {
  }

}
  

2.然后在web.xml里配置需要登陆权限验证的JSP文件:

     a.如果是某个具体的JSP文件(如a.jsp)需要登陆验证

 < web-app > 
  ...
  
 < filter > 
    
 < filter-name > right filter-name > 
    
 < filter-class > com.taihuatalk.taihua.common.RightFilter filter-class > 
  
 filter > 

  
 < filter-mapping > 
    
 < filter-name > right filter-name > 
    
 < url-pattern > /a.jsp url-pattern > 
  
 filter-mapping > 
  ...
 web-app >

    b.如果是某一个目录(如a/目录)整个目录下的文件都需要登陆验证:

 < web-app > 
  ...
  
 < filter > 
    
 < filter-name > right filter-name > 
    
 < filter-class > com.taihuatalk.taihua.common.RightFilter filter-class > 
  
 filter > 

  
 < filter-mapping > 
    
 < filter-name > right filter-name > 
    
 < url-pattern > /a/* url-pattern > 
  
 filter-mapping > 
  ...
 web-app > 

 

@Servlet3.0中的创建过滤器:使用@WebFilter

@WebFilter用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性(以下所有属性均为可选属性,但是value、urlPatterns、servletNames三者必需至少包含一个,且value和urlPatterns不能共存,如果同时指定,通常忽略value的取值):

属性名类型描述

1.filterNameString指定过滤器的name属性。

2.valueString[]该属性等价于urlPatterns属性。但是两者不应该同时使用。

3.urlPatternsString[]指定一组过滤器的URL匹配模式。等价于标签。

4.servletNamesString[]指定过滤器将应用于哪些Servlet。取值是@WebServlet中的name属性的取值,或者是web.xml中的取值。

5.dispatcherTypesDispatcherType指定过滤器的转发模式。具体取值包括:

   ◆ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。

   ◆initParamsWebInitParam[]指定一组过滤器初始化参数,等价于标签。

   ◆asyncSupportedboolean声明过滤器是否支持异步操作模式,等价于标签。

   ◆descriptionString该过滤器的描述信息,等价于标签。

   ◆displayNameString该过滤器的显示名,通常配合工具使用,等价于标签。

一个简单的示例:

@WebFilter(filterName = "AuthenticateFilter", urlPatterns ={"/stock.jsp""/getquote"})
public class AuthenticateFilter implements Filter {
    
public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain)     
throws IOException, ServletException {
        String username 
= ((HttpServletRequest) request).getParameter("uname");
        String password 
= ((HttpServletRequest) request).getParameter("password");
        
if (username == null || password == null) {
                 ((HttpServletResponse) response).sendRedirect(
"index.jsp");            

        } 
        if (username.equals("admin"&& password.equals("admin")) {
                chain.doFilter(request, response);      

        } else {
                ((HttpServletResponse) response).sendRedirect(
"index.jsp");        

        }
    }
    
public void destroy() {
    }

    public void init(FilterConfig filterConfig) {
    }
}

如此配置之后,就可以不必在web.xml中配置相应的和元素了,容器会在部署时根据指定的属性将该类发布为过滤器。

 

具体Servlet3.0相关的内容请参考:http://blog.csdn.net/flfna/archive/2010/05/16/5598201.aspx

 

分享到:
评论

相关推荐

    JavaWeb Servlet中Filter过滤器的详解

    JavaWeb Servlet中Filter过滤器的详解 1.简述  Filter过滤器,对web服务器所有web资源进行过滤,从而实现一些特殊的功能(权限访问控制、过滤敏感词汇、压缩响应信息)。Filter能够对Servlet容器的请求和响应进行检查...

    servlet过滤器实例经典过滤器

    根据Java Servlet规范,过滤器(Filter)是一个实现了javax.servlet.Filter接口的类,它能够在请求处理链中插入额外的逻辑。通过在web.xml文件中定义过滤器,我们可以指定哪些请求路径需要被过滤,并且可以设置多个...

    简单使用Filter模拟Servlet中的过滤器

    本篇博客“简单使用Filter模拟Servlet中的过滤器”主要探讨了如何在实际应用中实现和配置Filter,以及其工作原理。虽然描述部分为空,但我们可以从标题推测,博主可能详细讲解了如何创建一个基本的Filter类,实现...

    jsp servlet中的过滤器Filter配置总结

    而Filter(过滤器)是Servlet API的一部分,它提供了一种机制,可以在请求到达目标资源之前或之后对请求和响应进行拦截处理。Filter在处理Web请求时扮演着不可或缺的角色,比如日志记录、权限验证、内容压缩等。以下...

    Servlet过滤器的简单使用源码+文档

    在"006ServletFilter"这个文件中,可能包含了以下内容: - `web.xml`配置文件:定义了过滤器的映射规则,指明哪些请求路径需要被过滤器处理。 - 自定义过滤器类:实现了`Filter`接口,包含上述的三个方法。 - 登录...

    servlet过滤器技术实例,

    在本实例中,我们将深入探讨Servlet过滤器(Filter)的使用和实现,以及它在实际应用中的重要性。 一、Servlet过滤器简介 Servlet过滤器遵循Java Servlet规范,通过实现`javax.servlet.Filter`接口来创建自定义过滤...

    servlet 过滤器做的简单登陆demo

    Servlet过滤器遵循`Filter`接口,通过在web.xml配置文件中声明过滤器,可以指定哪些请求需要经过过滤。当用户发起请求时,过滤器会先于目标Servlet执行,可以用来进行预处理,如认证、编码转换、日志记录等。 2. *...

    jsp+servlet登录验证过滤器

    在这个项目中,“jsp+servlet登录验证过滤器”涉及了用户登录验证的过程,以及使用过滤器(Filter)来实现这一功能。下面将详细介绍这个主题中的相关知识点。 1. **JSP**:JSP是一种服务器端的技术,允许开发者在...

    基于servlet的过滤器

    在这个小型的基于Servlet的过滤器项目中,我们主要关注如何利用过滤器来实现对网站访问用户的计数功能。这个功能在很多网站统计分析中都非常常见,可以帮助我们了解网站的流量情况。 首先,我们要理解Servlet过滤器...

    servlet过滤器实现(Eclipse工程)

    Servlet过滤器是Servlet API的一部分,定义在`javax.servlet.Filter`接口中。它们的主要作用是拦截HTTP请求,对请求或响应进行预处理和后处理,比如登录检查、GZIP压缩、字符编码转换等。过滤器可以应用于整个Web...

    java中servlet文字过滤器

    本文将深入探讨"java中servlet文字过滤器"的概念、实现及应用场景。 ### 1. Servlet Filter简介 Servlet Filter是一种可以在请求到达目标Servlet之前或之后执行的拦截机制。它允许我们在不修改Servlet代码的情况下...

    servlet过滤器验证用户登录

    在IT领域,特别是Java Web开发中,Servlet过滤器(Filter)是实现用户权限管理、登录状态验证等关键功能的重要机制之一。本文将深入探讨如何利用Servlet过滤器来验证用户是否已登录,以及如何配置过滤器以针对特定的...

    Servlet过滤器小实例

    因此,使用Servlet过滤器(Filter)来处理这类问题成为了一种更加优雅的解决方案。 #### 实例目标 本实例的目标是设计并实现一个简单的Servlet过滤器,用于检查用户的登录状态。具体来说,当用户通过正常的登录...

    servlet过滤器Filter入门

    * ServletResponse 对象通常在简单的过滤器中被忽略。 * FilterChain 对象用来调用 servlet 或 JSP 页。 6. FilterChain 对象 FilterChain 对象提供了一种机制来调用下一个相关的过滤器。如果没有另一个过滤器与 ...

    JAVA WEB中的Servlet过滤器

    在Java Web开发中,Servlet过滤器(Filter)是不可或缺的一部分,它允许开发者在请求到达Servlet之前或响应离开Servlet之后对其进行处理。Servlet过滤器是按照指定的配置顺序进行调用的,能够实现数据的预处理、后...

    servlet中的过滤器与监听器

    在Servlet技术中,过滤器(Filter)和监听器(Listener)是两个非常重要的概念,它们帮助开发者实现对请求和响应的拦截、处理以及管理应用程序的状态。 ### 1. Servlet过滤器 **过滤器** 是Servlet API提供的一种...

    tomcat、struts2、servlet Filter(过滤器) 工作原理

    Servlet Filter(过滤器)是Servlet API的一部分,它允许开发者在请求被Servlet处理之前或之后对请求和响应进行拦截和修改。Filter可以用来实现如登录验证、字符编码转换、日志记录等多种功能。当一个请求到达Web...

    Servlet3.0使用注解标注过滤器(Filter)

    在这个例子中,`Servlet3Filter` 类被 `@WebFilter` 注解标记,其 `filterName` 属性设置为 "Servlet3Filter",并且 `urlPatterns` 属性设置为 "/*",意味着这个过滤器将拦截所有进入应用程序的请求。 #### 六、`@...

    servlet 过滤器例子 filter

    本示例“servlet过滤器例子filter”将深入讲解如何使用Servlet过滤器以及其在实际应用中的作用。 首先,我们来了解什么是Servlet过滤器。Servlet过滤器(Filter)是Servlet API的一部分,定义在`javax.servlet....

Global site tag (gtag.js) - Google Analytics