开发Servlet2.3 filter的步骤
简单 Servlet2.3 filter 开发作者:润名
一:简介
新的 Java Servlet 2.3 规范有不少最激动人心的功能,其中之一便是 filter (过滤器)。filter可以改变一个请求(request)或者是修改响应(response)。filter不是一个servlet,它只是一个servlet接受到请求前的预处理器。就是说,用户发送一个请求给servlet时,在servlet处理之前,这个filter首先执行,然后才是servlet的执行。
二:作用
filter可以用在下面几个方面
1:访问特定资源(Web 页、JSP 页、servlet)时的身份
2:访问资源的记录
3:访问资源的转换
三:编写filter
一个filter 必须实现javax.servlet.Filter 接口,即实现下面的三个方法:
1: doFilter(ServletRequest, ServletResponse, FilterChain):这是一个完成过滤行为的方法。这同样是上游过滤器调用的方法。引入的 FilterChain 对象提供了后续过滤器所要调用的信息。
2: init(FilterConfig):这是一个容器所调用的初始化方法。它保证了在第一次 doFilter() 调用前由容器调用。您能获取在 web.xml 文件中指定的初始化参数。
3: destroy():容器在破坏过滤器实例前,doFilter()中的所有活动都被该实例终止后,调用该方法。
四:示例
功能:限制客户端 IP 的访问
代码如下:
package com.Servlet.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.Filter;
public class myfilter implements Filter
{
private FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig)
{
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException
{
try
{
res.setContentType("text/html;charset=GBK");
PrintWriter out = res.getWriter();
String remoteAddr = ((HttpServletRequest) req).getRemoteAddr();
if ((remoteAddr.indexOf("127.0.0.1") != -1) || (remoteAddr.indexOf("localhost") != -1)) { //这里做判断
out.println("<html><head></head><body>");
out.println("<h1>哈哈,IP 127.0.0.1 和 IP localhost 不能访问本网站~~</h1>");
out.println("</body></html>");
out.close();
return;
}
else
{
out.println("<html><head></head><body>");
out.println("<h1>恭喜,你已经成功访问本网站了~~</h1>");
out.println("</body></html>");
out.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void destroy()
{
}
}
实现思路:通过ServletRequest类的getRemoteAddr()方法得到访问这个应用的客户端ip,然后对这个ip作一些处理,如果不符合条件,可以限制访问。这样可以很好的保护应用。
五:配置
以 Weblogic 为例:每个使用filter的应用的web.xml类似下面
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
// 下面是过滤器的配置
<filter>
<filter-name>MyFilter</filter-name> //这里是Filter的名字,随便你怎么起
<filter-class>com.Servlet.filter.myfilter</filter-class> //Filter的类名,注意包含package
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>//与上面的保持一致
<url-pattern>/*</url-pattern> //对所有资源应用此filter
</filter-mapping>
</web-app>
本文地址:http://www.45fan.com/dnjc/69558.html