前一阵子因为在做项目时碰到了这个功能,现在好好总结一下,至于为什么要限制IP访问,我就不多说了。然后百度了一下,现在主要有两种方式去限制IP访问,第一种是最简单的方便的,第二种是通过过滤器来限制访问。下面我简单介绍一下第一种方式,着重介绍第二种。
第一种方式(Tomcat配置项配置允许或限制IP访问)
这种是最简单的快捷的,主要就涉及Tomcat的server.xml配置。
第一步:找到server.xml文件在哪,在Tomcat的目录下的conf文件夹下。
第二步:打开server.xml文件,找到Host节点,在其中加上:
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1" deny=""/>
其中:
className:表示java类名,必须是
org.apache.catalina.valves.RemoteHostValve或org.apache.catalina.valves.RemoteAddrValve;
allow:表示允许的IP,支持模糊(* )、正则,多个用,隔开;
deny:表示限制的IP,支持模糊( *)、正则;多个用,隔开。
注:如果是限制某一个站点(网站)则在Context节点中添加。
第三步:重启Tomcat。
第二种方式(通过Filter过滤器来配置允许或限制IP访问)
(1)代码实现的思路
通过增加配置文件properties,将允许访问的IP按一定规则配置进去;接下来再对配置文件(这里尚且叫做配置文件)进行加载;然后再对配置文件的格式要求通过正则进行校验;其次将配置的IP通过一个集合进行收集,可收集单条IP或一个IP的正则,因为我们这里需要用到模糊;最后对访问者的IP与集合中的进行比对,比对通过则正常访问,否则。反之。
在配置文件中提供三种最常见的IP配置方式:
单个IP地址的配置,多个之间用逗号或分好隔开;
例如:192.168.1.50;127.0.0.1;IP地址区间方式的配置,多个区间用逗号或分好隔开;
例如:172.20.32.10-172.20.32.11;172.20.32.88-172.20.32.89通配符,多个用逗号或分好隔开。
例如:172.20.30.*
(2)具体实现代码
第一步:编写配置文件/Test/src/com/config/ipConfig.properties;
#单个IP地址的配置,多个之间用逗号或分好隔开 allowIP=192.168.1.50;127.0.0.1; #IP地址区间方式的配置,多个区间用逗号或分好隔开 allowIPRange=172.20.32.10-172.20.32.11;172.20.32.88-172.20.32.89 #通配符,多个用逗号或分好隔开 allowIPWildcard=172.20.30.*;
第二步:新建Java类实现Filter;
第三步:在web.xml中配置过滤器;
<!-- 过滤器 --> <!-- ip过滤器,过滤所有请求地址 --> <filter> <filter-name>IPFilter</filter-name> <filter-class>com.filter.IpFilter</filter-class> </filter> <filter-mapping> <filter-name>IPFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 结束过滤器 -->
第四步:我们需要声明一个全局变量List来存放允许访问的IP或正则式;
//声明的代码: //用来存放允许访问的ip private List<String> allowList = new ArrayList<String>();
第五步:需要对配置文件进行加载;在方法init中
//加载的代码: //将文件转化成流 InputStream inputStream = IpFilter.class.getResourceAsStream("../config/ipConfig.properties"); Properties propert<i>本文来源gaodai$ma#com搞$代*码网2</i>ies = new Properties(); //通过Properties对象实例加载流 properties.load(inputStream); //获取三种配置方式的值 String allowIP = properties.getProperty("allowIP"); String allowIPRange = properties.getProperty("allowIPRange"); String allowIPWildcard = properties.getProperty("allowIPWildcard");