为Tomcat写了一个增强的可以限制浏览器和防盗链过滤器提交到Tomcat的bug里被拒了:( - lizongbo 的编程学习

来源:百度文库 编辑:神马文学网 时间:2024/04/29 02:54:11
为Tomcat写了一个增强的可以限制浏览器和防盗链过滤器提交到Tomcat的bug里被拒了:(

通过 Tomcat的配置可以限制某些主机访问,或者禁止某些IP地址访问。
根据这个思路,我写了一个增强功能的Class,通过灵活的配置,实现可以禁止某些浏览器访问,或者只允许某些浏览器的访问,
而且,还可以用来防盗链。但是Tomcat的 bug管理人员认为这个没有必要,非要让大家自己去用过滤器来实现:(

先给配置信息示例:
header="User-Agent"          deny="*httunit*"/> 
header="Referer"     deny="*.mydomain.com, *localhost*"/>

上面的代码表示,禁止用户用httpunit访问,和禁止localhos等盗链连接。

具体的java代码在:

package org.apache.catalina.valves;

import java.io.*;
import javax.servlet.*;

import org.apache.catalina.connector.*;

/**
 *

Title: Request Header Filter For Tomcat


 *

Description:
 * eg: set follow coment in ${catalina.home}/conf/server.xml:
 *          deny="*httunit*"/>
 * then you can forbidden someone use httpunit to Access the Engine ,Host or Context
 * or:
 *          deny="*.mydomain.com, *localhost*"/>
 * then you can forbidden someone open the link from *.mydomain.com or localhost
 *


 *

Copyright: Apache License Version 2.0 


 *

Company: lizongbo


 * @author lizongbo @ gmail.com
 * @version 1.0
 */
public final class RequestHeaderValve
    extends RequestFilterValve {
  private String header = "";
  public void invoke(Request request, Response response) throws IOException,
      ServletException {
    String headervalue = request.getRequest().getHeader(getHeader());
    headervalue = headervalue != null ? headervalue : "";
    process(headervalue, request, response);
  }

  public String getHeader() {
    return header;
  }

  public void setHeader(String header) {
    this.header = header;
  }
}



编译好的class必须放到:

%TOMCATHOME%\server\classes\org\apache\catalina\valves
例如: "D:\jakarta-tomcat-5.5.7
\server\classes\org\apache\catalina\valves\RequestHeaderValve.class.class"


bug 提交在:

http://issues.apache.org/bugzilla/show_bug.cgi?id=33632

申请了一个Google group,也在这里放了一份:
http://groups-beta.google.com/group/lizongbo/browse_thread/thread/07389803736c635e/1ee8442eee5231d9