IP过滤的实现是发生在客户端访问服务器的过程中,通过过滤器的拦截判断。
实现:本机地址列入黑名单,使访问受限
1.在web.xml中对过滤器进行配置
<filter>
<filter-name>IPFilter</filter-name>
<filter-class>com.lxchen.Filter.IPFilter</filter-class>
<init-param>
<param-name>IP</param-name>
<param-value>127.0.0.1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>IPFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
2.通过(java.servlet.FilterConfig)中的可以获取部署描述符文件(web.xml)中分配的过滤器初始化参数。
在FilterConfig对象中具有一个getInitParameter方法,可以访问部署描述符文件(web.xml)中分配的过滤器初始化参数。
配置一个Servlet。
Public class IPFilter implements Filter{
protected FilterConfig config;
protected String ip;
public void destroy{
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain
chain)throws IOException, ServletException{
//从客户端获取访问用户的IP地址
String UserIP = request.getRomoteAddr();
//进行判断,如果获取到的IP地址与所限制的IP相匹配,那么禁止访问
if(UserIP.equals(ip)){
//相匹配,禁止访问,向客户端反馈信息
//设置输出编码格式,防止客户端界面出现乱码.
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
//设置一个 io 输出流,将信息输出到客户端页面
PrintWriter out = response.getWriter();
out.print("访问受限!!!!!");
}else{
chain.doFilter(request,response);
}
}
public void init(FilterConfig config)throws ServletException{
//初始化IP,从配置文件中获取提前配置好的限制IP地址
this.config = config;
ip = config.getInitParameter("IP");
}
}
实现:限制多个IP访问。定义一个数组接受多个IP地址,然后对这些IP地址进行循环遍历。如果有相匹配的IP,实现步骤如上。
只需改变doFilter中的代码:
doFilter(ServletRequest request , ServletResponse response, FilterChain chain)throws IOException , ServletException{
//定义一个数组 arr 接受多个限制IP地址
String[] arr = new String[]{"127.0.0.1","127.0.0.2","127.0.0.3"};
String UserIP = request.getRemoteAddr();
boolean flag = false;
for(String str : arr){
if(str.equals(UserIP)){
flag = true;
}
}
if(flag){
response.setContentType("text/html");
response.setCharacterEncoding("uft-8");
PrintWriter out = response.getWriter();
out.print("访问受限!!!!");
}else{
chain.doFilter(request,response);
}
}