`
weilJava
  • 浏览: 70033 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

【转】如何实现一个过滤器

 
阅读更多
1.所在的类实现Filter接口
 public interface Filter
public void init(FilterConfig filterConfig)throws ServletException
过滤器初始化是在容器启动时自动初始化
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletExcepton
在标准Servlet中的doGet或doPost 方法中,传递参数为:HttpServletRequest、HttpServletResponse
过滤器销毁
public void destroy()

package cn.mldn.lxh.filter
import java.io.*;
import javax.servlet.*;
public class FirstFilter implements Filter
{
  public void init(FilterConfig config)throws ServletException
  {
  System.out.println("过滤器初始化");
  }
  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException
{
System.out.println(过滤doFilter);
}
  public void destroy()
{
System.out.println(过滤器销毁);
}
}

web.xml文件配置
<filter>
<filter-name>first</filter-name>
<filter-class>cn.mldn.lxh.filter.FirstFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>first</filter-name>

与servlet中的url-pattern不一样,此处表示对那个页面进行过滤,如果全部都过滤,则"/*"
<url-pattern>/*</url-pattern>
</filter-mapping>

如果过滤器要将内容传递到目的地,则需要FilterChain,将请求继续向下转发

过滤器也会执行两次:FilterChain这前执行一次,之后再执行一次

1.过滤非法文字:
package cn.mldn.lxh.filter;
import java.io.*;
import javax.servlet.*;
public class CharFilter implements Filter
{
  public void init(FilterConfig filterConfig)throws ServletException
  {
  //System.out.println("init");
  }
  public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
{
String content=request.getParameter("content");
//如果indexOf返回-1则表示没有查到所要的内容
if(content!=null)
if(content.indexOf("AAA")==-1)
{
chain.doFilter(request,response);
}
esle
{
System.out.println("有非法文字");
//如果需要的话,此处依然可以使用RequestDispatcher进行跳转
}
}
else
{
chain.doFilter(request,response);
}
}
public void destroy()
{
//System.out.println("过滤器销毁");
}

<filter>
<filter-name>char</filter-name>
<filter-class>cn.mldn.lxh.filter.CharFilter</filter-class>
</filter>

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

2.对内容进行统一的编码
setCharacterEncoding("GB2312");

package cn.mldn.lxh.filter;
import java.io.*;
import javax.servlet.*;
public class EncodingFilter implements Filter
{
public void init(FilterConfig filterConfig)throws ServletException
{
//System.out.println("过滤器初始化");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
{
try{
request.setCharacterEncoding("GB2312");
}
catch(Exception e)
{}
chain.doFilter(request,response);
}
public void destroy()
{
//System.out.println("销毁");
}
}

<filter>
<filter-name>encoding</filter-name>
<filter-class></filter-class>
</filter>

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

3.登陆验证
package cn.mldn.lxh.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LoginFilter implements Filter
{
public void init(FilterCoinfig filterConfig)throws ServletException
{
//System.out.println("过滤器初始化");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws IOException,ServletException
{
//Session属于http范畴,把以ServletRequest对象需要先转换成HttpServletRequest对象
HttpServletRequest req=(HttpServletRequest)request;
HttpSession session =req.getSession();
//如果session不为空,则可以浏览其它页面
if(session.getAttribute("uname")!=null)
{
chain.doFilter(request,response);
}
else
{
//通过requestDispatcher跳转到登陆面
request.getRequestDispatcher("login.jsp").forward(request,response);
}
}
public void destroy()
{
//System,out.println("销毁");
}
}

<filter>
<filter-name>login</filter-name>
<filter-class>cn.mldn.lxh.filter.LoginFilter</filter-class>
<init-param>
  <param-name>参数名称</param-name>
  <param-value>参数值</param-value>
  </init-param>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

读取web.xml中的参数的方法:

public void init(FilterConfig arg0) throws ServletException {
String 参数值= arg0.getInitParameter("参数名称");
}


转自:http://topic.csdn.net/u/20071221/15/53b6f2bd-51a3-47bb-8331-0c39e99f52fd.html

分享到:
评论

相关推荐

    管道过滤器程序,主要用java实现

    在这个场景中,"管道过滤器程序,主要用java实现" 指的是一个基于Java的系统,它利用了这种模式来处理数据流。 首先,我们来详细解释管道过滤器模式的基本概念。在管道过滤器模式中,数据流通过一系列的过滤器进行...

    Java SpringBoot实现的过滤器(和拦截器)控制登录页面跳转

    这个压缩包可能包含了一个示例项目,展示了如何在SpringBoot中配置和使用过滤器或拦截器进行登录验证。你可能需要解压并导入到IDE中,按照提供的说明运行和测试,以便更好地理解和学习这个功能。 通过深入理解这些...

    管道过滤器的实现java

    这个模式基于“责任链”概念,允许我们创建一系列相互连接的过滤器,每个过滤器执行特定的操作,然后将结果传递给下一个过滤器。在Java中,我们可以使用`java.io`包中的`FilterInputStream`、`FilterOutputStream`等...

    servlet+jsp实现过滤器 防止用户未登录访问

    综上所述,使用servlet+jsp实现过滤器,可以有效地防止未登录用户访问受保护页面。开发者可以灵活地定义过滤器的行为,并且通过配置文件将过滤器与具体的URL模式关联起来,实现复杂的权限控制逻辑。

    java 消息过滤器的实现

    在这种模式下,多个过滤器按照一定的顺序串联起来,每个过滤器都可以对消息进行处理,然后将处理结果传递给下一个过滤器,直到链的末尾。这种设计使得我们可以灵活地添加、删除或修改过滤器,而不会影响其他部分的...

    转换中文的过滤器(java 中转换中文)

    在Java编程语言中,处理中文字符的转换是一个常见的需求,特别是在进行数据处理、网络通信或者文件操作时。中文字符集的编码方式多样,包括GBK...在设计和实现过滤器时,要考虑到性能和兼容性,以适应不同的应用场景。

    servlet 过滤器做的简单登陆demo

    Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达目标Servlet之前或之后对请求和响应进行处理。在这个“servlet过滤器做的简单登陆demo”中,我们将探讨如何利用过滤器实现一个基础的登录验证...

    servlet过滤器实例经典过滤器

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

    实现过滤器

    在IT行业中,"实现过滤器"通常指的是在网络应用开发中使用的Filter机制,它是一个设计模式,主要用于处理HTTP请求和响应。这种技术广泛应用于Java Servlet、Spring MVC等框架中,为开发者提供了一种拦截请求和响应的...

    过滤器链的一个小Demo

    过滤器链(Filter Chain)则是多个过滤器按照特定顺序组织起来,共同处理同一个请求或响应。本篇文章将通过一个名为"FilterChainDemo"的小型示例来探讨过滤器链的工作原理及其应用。 首先,我们来理解过滤器的基本...

    管道过滤器(软件体系结构)

    管道则用于连接过滤器,实现数据从一个过滤器到另一个过滤器的传递。 - **独立性**:过滤器之间是相互独立的,一个过滤器的状态不会影响其他过滤器的状态。这意味着各个过滤器可以在不同的硬件资源上运行,提高了...

    JAVA过滤器标准代码

    总之,JAVA过滤器作为Java Web开发中的一个重要组成部分,提供了强大的功能和灵活性,可以用于解决多种实际问题,包括但不限于编码处理、权限验证、日志记录、异常处理、数据格式转换和缓存优化等。理解和掌握过滤器...

    JAVA过滤器及原理

    创建一个Java过滤器,首先需要实现Filter接口,并覆盖其方法。以下是一个简单示例: ```java import javax.servlet.*; import java.io.IOException; public class MyFilter implements Filter { @Override ...

    Springboot过滤器禁止ip频繁访问功能实现

    Springboot过滤器禁止ip频繁访问功能实现是指在Springboot项目中,通过编写一个过滤器来限制ip频繁访问的功能实现。这项功能可以防止恶意ip的访问,保护服务器的安全。 首先,需要了解什么是过滤器。在Web开发中,...

    servlet过滤器实现(Eclipse工程)

    Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达Servlet之前或者响应离开Servlet之后进行拦截处理。本教程将详细介绍如何在Eclipse环境中创建并实现一个Servlet过滤器。 一、Servlet过滤器...

    jsp中过滤器配置实现所有过滤

    过滤器是一个实现了javax.servlet.Filter接口的类,它在请求到达目标资源(如Servlet或JSP)之前拦截请求,并在响应返回客户端之前拦截响应。通过`doFilter()`方法,过滤器可以对请求和响应进行修改或者转发到其他...

    JAVA代码实现管道过滤器

    - **数据压缩**:实现一个GZIP或ZLIB过滤器,对流中的数据进行压缩或解压缩。 4. **高级用法**: - **装饰者模式**:管道过滤器是装饰者模式的一个实例,它可以动态地增加对象的功能而不改变其接口。 - **责任链...

    servlet过滤器技术实例,

    你需要在这个方法中实现过滤逻辑,然后调用`chain.doFilter()`将请求传递给下一个过滤器或目标Servlet。 3. `destroy()`: 过滤器销毁时调用,用于释放资源。 三、过滤器配置 在Web应用程序的`web.xml`配置文件中,...

    过滤器(java编写的过滤器)

    这里定义了一个名为`loginFilter`的过滤器,其具体实现类为`spell.loginFilter`。这意味着在应用中,存在一个名为`spell.loginFilter`的Java类,这个类实现了`javax.servlet.Filter`接口,定义了过滤器的具体逻辑。 ...

    java过滤器例子

    每个过滤器都有机会对请求和响应进行处理,然后传递给下一个过滤器,直到请求到达目标资源。返回时,响应也会按照相反的顺序通过过滤器链。 ### 过滤器的生命周期 1. **初始化(Init)**:当应用启动时,每个过滤...

Global site tag (gtag.js) - Google Analytics