原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本人声明。否则将追究法律责任。
作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui0317/article/details/9822981
作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui0317/article/details/9822981
在实际应用中,部署的项目如果收到恶意攻击,那么就需要将收到请求的ip过滤掉,现在以Filter过滤器为例讲解实现方式:
1、自定义Filter过滤器,继承自javax.servlet.Filter 这个接口,实现它里面的三个方法;
2、在init() 方法中接收配置的禁止访问的ip,以逗号分隔;
3、在doFilter() 中进行业务处理,取出当前访问的ip 与系统中配置的ip匹配,如果存在则跳转到禁止访问的页面,如果没有就放行;
4、在web.xml中配置该过滤器,指定拦截方式为所有请求,然后添加初始化参数指定禁止访问的ip。
具体代码如下:
package com.chenghui.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 定义IpFilter过滤器,过滤掉自己配置的ip列表禁止访问系统
* ip列表在配置的filter中加入初始化参数即可。
* @author Administrator
*
*/
public class IpFilter implements Filter{
String [] forbidIps = null;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
//由于拦截器定义的拦截规范是/* ,所以所有的请求都会被拦截,为了防止死循环 开一个特例显示具体的访问结果
if(((HttpServletRequest)request).getRequestURI().contains("forbid.jsp")){
filterChain.doFilter(request, response);
return;//不加return 会继续执行请求。
}
String remoteAddr = request.getRemoteAddr();
if(forbidIps!=null){
for (int i=0; i<forbidIps.length; i++) {
if(forbidIps[i].equals(remoteAddr)){
//如果访问的ip与配置的ip相等 则直接过滤掉。
((HttpServletResponse)response).sendRedirect("forbid.jsp");
return;
}
}
}
filterChain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//获取在web.xml中配置的<filter>的初始化参数
String initParamter = filterConfig.getInitParameter("forbidIps");
if(initParamter != null){
forbidIps = initParamter.split(",");
}
}
}
web.xml中的配置如下:
<!-- ip过滤器 -->
<filter>
<filter-name>ipFilter</filter-name>
<filter-class>com.chenghui.util.IpFilter</filter-class>
<init-param>
<param-name>forbidIps</param-name>
<param-value>192.168.1.108,192.168.6.89,192.168.6.99</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ipFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
好了,IpFilter过滤器定义完毕了,然后部署项目,在浏览器中运行试试看,效果如下: