- 浏览: 588046 次
文章分类
- 全部博客 (411)
- 常用工具 (21)
- 喜好 (14)
- 英语 (3)
- java (51)
- ext (4)
- css (44)
- php (34)
- window (7)
- jquery (21)
- js (31)
- struts (4)
- tomcat (1)
- struts2 (11)
- 网络 (4)
- c# (7)
- linux (27)
- oracle (15)
- tag标签 (5)
- 生成静态页面 (6)
- sql (12)
- hibernate (13)
- DesignPattern (3)
- spring (2)
- flex (17)
- excel应用 (1)
- 报表 (2)
- 业界 (2)
- 数据建模 (1)
- 平板 (1)
- ppt (1)
- rich (1)
最新评论
-
youngdze:
受教了,谢谢!
十步解决php utf-8编码 -
DiLiya:
感谢你的讲解;帮了大忙了!
解决-innerHTML无法在TBODY中使用 -
eppen:
强的没话说。帮了大忙。感谢goby2008 ,感谢google ...
解决-innerHTML无法在TBODY中使用 -
cxs4808:
rr
flex 设计模式 -
liuxingvsyou:
3个jQuery弹出窗口插件
IP地址段的过滤
昨天接到领导指示,要对地市的IP地址进行过滤,晕了,过滤啥呀,不过想归想,那还得做不是,呵呵
开始想在服务器<Tomcat>上整一下呢,仔细一看不行,附Tomcat过滤IP方法:
限制ip,限制主机访问:
如果想禁止指定的ip或者主机名来拒绝某些机器访问,或者指定某些机器来访问。
也支持分别按Engine, Host, or Context,进行以下配置:
<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>
参考:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/context.html
没辙,继续...
因为要过滤的IP有七十二组<(58.87.96.0 58.57.121.255),(219.147.0.0 219.147.0.211)>想到用正则表达式,因为本人对正则表达式这东西,实在不精,呵呵,也就没敢用,呵呵
最终在于朋友交流后,采取如下形式解决的:
一、新建一xml配置文件,将要过滤的IP段写入;
二、新建一Filter,完成过滤要求
代码如下所示:
IP.XML
<?xml version="1.0" encoding="UTF-8"?>
<root id="allow">
<group>
<start>122.6.192.0</start>
<end>122.6.255.255</end>
</group>
<group>
<start>219.146.208.0</start>
<end>219.146.215.255</end>
</group>
<group>
<start>222.174.224.0</start>
<end>222.174.255.255</end>
</group>
</root>
Filter如下所示:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import javax.xml.parsers.*;
public class FilterServlet extends HttpServlet implements Filter {
private Document doc=null;
private FilterConfig filterConfig;
//Handle the passed-in FilterConfig
private String encoding = "GBK";
public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
//Process the request/response pair
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) {
HttpServletResponse httpResp = null;
HttpServletRequest httpReq = null;
try {
String reqip = request.getRemoteHost();
if(null != reqip){
reqip = reqip.replace('.','_');
}
String[] temp = reqip.split("_");
int[] ip = new int[temp.length];
for(int i=0;i<temp.length;i++){
ip[i] = new Integer(temp[i]).intValue();
}
if (response instanceof HttpServletResponse) {
httpReq = (HttpServletRequest)request;
httpResp = (HttpServletResponse)response;
if(!viewXml(httpReq.getRealPath("/")+"/WEB-INF/ip.xml",ip)){
httpResp.sendRedirect(" http://welcome.sd.vnet.cn/
");
}
filterChain.doFilter(request, response);
}
}
catch (ServletException sx) {
filterConfig.getServletContext().log(sx.getMessage());
}
catch (IOException iox) {
filterConfig.getServletContext().log(iox.getMessage());
}catch(Exception e){
filterConfig.getServletContext().log(e.getMessage());
}
}
/**
* 验证请求IP是否符合要求
* @param xmlFile
* @return
* @throws Exception
*/
public boolean viewXml(String xmlFile,int[] ip) throws Exception {
int[] test = ip;
boolean flag = true;
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
doc=db.parse(new File(xmlFile));
Element root = doc.getDocumentElement();
NodeList list = root.getElementsByTagName("group");
for (int i=0; i < list.getLength() ; i++) {
Element element = (Element)list.item(i);
NodeList titleid = element.getElementsByTagName("start");
Element idElement = (Element)titleid.item(0);
String ip1 = idElement.getFirstChild().getNodeValue();
ip1 = ip1.replace('.','_');
String[] ip1s = ip1.trim().split("_");
Integer[] ipl1 = new Integer[ip1s.length];
for(int a=0;a<ip1s.length;a++){
ipl1[a] = new Integer(ip1s[a]);
}
NodeList titleList = element.getElementsByTagName("end");
Element titleElement = (Element)titleList.item(0);
String ip2 = titleElement.getFirstChild().getNodeValue();
ip2 = ip2.replace('.','_');
String[] ip2s = ip2.trim().split("_");
Integer[] ipl2 = new Integer[ip2s.length];
for(int b=0;b<ip2s.length;b++){
ipl2[b] = new Integer(ip2s[b]);
}
long test_value = test[0]*255*255*255+test[1]*255*255+test[2]*255+test[3];
long ip1_value = ipl1[0]*255*255*255+ipl1[1]*255*255+ipl1[2]*255+ipl1[3];
long ip2_value = ipl2[0]*255*255*255+ipl2[1]*255*255+ipl2[2]*255+ipl2[3];
if(test_value >= ip1_value && test_value <= ip2_value){
return true;
}
}
return false;
}
public void destroy() {
filterConfig = null;
encoding = null;
}
}
WEB.XML如下:
<filter>
<filter-name>filterservlet</filter-name>
<filter-class>com.lvke.web.qcbst.util.common.FilterServlet</filter-class>
</filter>
<filter-mapping>
<filter-name>filterservlet</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
希望能给用到的朋友减少一下负担,呵呵
发表评论
-
eclipse 复制粘贴时很慢(转)
2012-08-20 22:06 1675Window > Preferences > Ja ... -
java compiler level does not match the version of the installed java project
2012-06-13 22:26 713java compiler level does not ma ... -
Sql 取当天或当月的记录
2011-05-16 15:04 1711Sql 取当天或当月的记录 今天晚上加班,遇到要把数据库中的 ... -
eclipse快捷键大全
2010-11-13 16:38 6801. 常用快捷键(1)Ctrl+Space ... -
eclipse教程
2010-10-28 10:59 744http://www.vogella.de/eclipse.h ... -
Dialup
2010-10-14 23:42 1040package ch2.util; import jav ... -
o00000000
2010-10-13 17:22 846package com.goby.editor; imp ... -
Java Map 集合类简介(转)
2010-10-07 14:40 895了解最常用的集合类型之一 Map 的基础知识以及如何针对您 ... -
深入研究java.lang.ThreadLocal类(转)
2010-10-06 14:54 483深入研究java.lang.ThreadLocal类 ... -
通过ajax访问后台----参数通过post方式传递
2010-10-03 16:44 1367通过ajax访问后台----参数通过post方式传递1,前台页 ... -
java设计模式
2010-09-10 15:27 625java设计模式 -
JSP 获取当前URL方法
2010-08-09 17:01 2059方法一: request.getHeader(" ... -
解决java/jsp乱码的一种转换方法
2010-07-25 16:28 8441.jsp的contentType 的设置 ... -
org.apache.commons.fileupload.DiskFileUpload
2010-07-22 00:23 12041.setSizeMax方法setSizeMax方法用于设置请 ... -
JSP读写文本文件
2010-07-13 14:28 2399JSP读写文本文件 ... -
JAVA调用MYSQL存储过程
2010-06-21 23:58 1795JAVA调用MYSQL存储过程 工程视图: 代码清单 ... -
Java实现文件复制
2010-05-11 15:53 964import java.io.FileInputStream ... -
switch...case语句怎样接字符串啊???
2010-04-01 16:45 1808参考: <script language=& ... -
flex 网站
2010-02-06 01:00 623http://www.sumopaint.com/app/ ... -
将汉字转化为汉语拼音的小工具
2010-01-25 21:20 1202网上乱转,偶然看到一个很有意思的小工具,名字叫pinyin4j ...
相关推荐
String remoteHost=request.getRemoteHost(); log.info("Request from host:"+remoteHost); //判断客户计算机IP地址是否合法,以127开头的表示不合法,禁止访问
中国大陆IP过滤器-Java IP文件路径: 项目的resources/china_ip目录下 使用ChinaIPRecognizer类即可 更新记录 201911月30日更新 原文链接: 概述 本篇讲解如何快速判断IPV4地址是否在大陆境内的IP地址。 中国IPV4的...
如果想禁止指定的ip或者主机名来拒绝某些机器访问,或者指定某些机器来访问。
Java实现IPV6地址查询 Java IP V6 ipv6 地域 地址 查询 地址查询 使用ZX公网IPv6库 20120916版
IP地址的过滤,开通和关闭 IP地址的过滤,开通和关闭 IP地址的过滤,开通和关闭
用户IP地址所在地记录,jsp程序 src\ipaddr IPEntry.java IPSeeker.java Test1.java Test.java Utils.java
IP地址(可选,如果未提供,将使用自动发现服务) 路由:仅KNX路由器 您的KNX路由器设备上的过滤器表已正确配置,否则数据包将不会转发 KNX路由器使用的IP组播地址(可选,如果未提供,将使用默认的224.0.23.12组播...
IPv6 87 10.1 IPv6数据报 87 10.1.1 优先级分类 88 10.1.2 流标识 89 10.1.3 128位IP地址 89 10.1.4 IP扩展头 90 10.2 多IP地址主机 91 10.3 单播、组播和任一播头 91 10.4 从IPv4到IPv6的...
JIpAddressField IP地址输入框,只能输入0~255数字的IP地址 JListChooser 列表选择对话框 JNumberField 数字输入框,可限制小数位数,数字最大长度,最大最小能输入的数字 JPopupButton 带下拉菜单的工具栏按钮 ...
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件不能获取到客户端的真实IP地址了。像移动网关一样,iisforward这个...
这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行jar就可以了。 Java 3DMenu 界面源码 5个目标文件 ...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...
jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...