<Context path="/examples" ...> ... <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="*.mycompany.com,www.yourcompany.com"/> <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="192.168.1.*"/> ... </Context> See Remote Address Filter and Remote Host Filter for more information about the configuration options that are supported.
好像在tomcat的配置文件里可以设置的,但我不知道怎么设置?
你可以把你要限制的IP存入数据库,在FILTER运行的时候从数据库里取出做判断以下是一个例子(不过是调用了数据池的)import java.io.*;
import java.sql.*;
package ip;
import java.util.*;
import javax.naming.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.DataSource;
import javax.naming.InitialContext;
public class IPfilter implements Filter{
private String sqls= "select url from table_url";
private Hashtable hast= new Hashtable();
private DataSource ds= null;
private Context ctx= null;
private Context get= null;
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws ServletException,IOException{
PrintWriter out= response.getWriter();
HttpServletRequest req= (HttpServletRequest)request;
HttpServletResponse res= (HttpServletResponse)response;
String urlr= req.getContextPath();
String remotehosturl= (req.getRemoteAddr()).toString();
if(hast.get(remotehosturl)== null)
res.sendRedirect(urlr);
else
out.println("Error.");
chain.doFilter(request,response); }
public void init(FilterConfig config)
throws ServletException{
int numberurl=0;
try{
Context ctx= new InitialContext();
if(ctx== null) throw new Exception("InitialContext Failed!");
Context get= (Context)ctx.lookup("java:comp/env");
if(get== null) throw new Exception("Look find DataSource Failed!");
ds = (DataSource)get.lookup("jdbc/Connect");
}catch(Exception e){
}
try{
Connection con= ds.getConnection();
Statement stm= con.createStatement();
ResultSet rs= stm.executeQuery(sqls);
while (rs.next()){
hast.put((String)rs.getString(1),new Integer(++numberurl));
}
stm.close();
con.close();
}catch(Exception e){
}
}
public void destroy(){
}}
当然了,此外你还要修改web.xml配置文件<filter>
<filter-name>ip</fileter-name>
<filter-class>ip.IPfilter<filter-class>
</filter>
//以上为配置你的FILTER CLASS<filter-mapping>
<filter-name>ip</filter-name>
<url-pattern>/ip</url-pattern>
</filter-mapping>
//以上为配置该FILTER所监控的页面,本例为监控/ip目录下的所有文件
我这个是通用与所有的JSP/SERVLET服务器的
此外,这个FILTER是由TOMCAT在启动的时候自动加载的
并不需要每个程序都调用
<filter>
<name><name><class></class>
<filter>
<filter-mapping>
<name></name><url-pattern></url-pattern>
</filter-mapping>
<Context path="/examples" ...>
...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow="*.mycompany.com,www.yourcompany.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192.168.1.*"/>
...
</Context>
See Remote Address Filter and Remote Host Filter for more information about the configuration options that are supported.
我的tomcat是3.2的,也可以吗?
rootwuyu(wuyu),你说的那些是要添加的内容还是原本文件里就有那个选项,直接修改就可以了?
我的配置都好了,启动了tomcat后,跳出了一连串的字符(如端口号和http的版本等),但是在浏览器里(http://localhost:8080)并没有出现欢迎界面!!我的iis占用的是80端口!请问着是为何???我是找不出来什么原因??
可是他说要限定一组IP啊
不放到数据库的话就只能放到配置文件了
恩
可以在服务器启动的时候加载
不过这样似乎有点占内存
对于验证IP地址更经常用的是某个指定IP范围内,例如192.168.0.0-192.168.255.255。
IP范围可以存储在文件或者数据库中,对于某个IP是否位于范围内算法如下:
四段比较算法(适用IPv4)——
produce:CheckParaGraphIP()//按段比较IP,参数IP段;
1、CheckParaGraphIP(段1)//IP段1比较,若不位于指定范围内则设置结果标识转5;
2、CheckParaGraphIP(段2)//IP段2比较,若不位于指定范围内则设置结果标识转5;
3、CheckParaGraphIP(段3)//IP段3比较,若不位于指定范围内则设置结果标识转5;
4、CheckParaGraphIP(段4)//IP段4比较,若不位于指定范围内则设置结果标识转5;
5、比较成功则设置成功标识并退出。以上算法页可使用正则表达式实现。