tomcat使用Filter过滤ip禁止访问系统---NC Cloud实现IP控制

已邀请:

在实际应用中,部署的项目如果收到恶意攻击,那么就需要将收到请求的ip过滤掉,现在以Filter过滤器为例讲解实现方式:

    1、自定义Filter过滤器,继承自javax.servlet.Filter 这个接口,实现它里面的三个方法;

    2、在init() 方法中接收配置的禁止访问的ip,以逗号分隔;

    3、在doFilter() 中进行业务处理,取出当前访问的ip 与系统中配置的ip匹配,如果存在则跳转到禁止访问的页面,如果没有就放行;

    4、在web.xml中配置该过滤器,指定拦截方式为所有请求,然后添加初始化参数指定禁止访问的ip。

具体代码如下:

  1. package com.chenghui.util;
  2. import java.io.IOException;
  3. import javax.servlet.Filter;
  4. import javax.servlet.FilterChain;
  5. import javax.servlet.FilterConfig;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.ServletRequest;
  8. import javax.servlet.ServletResponse;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. /**
  12. * 定义IpFilter过滤器,过滤掉自己配置的ip列表禁止访问系统
  13. * ip列表在配置的filter中加入初始化参数即可。
  14. * @author Administrator
  15. *
  16. */
  17. public class IpFilter implements Filter{
  18. String [] forbidIps = null;
  19. @Override
  20. public void destroy() {
  21. // TODO Auto-generated method stub
  22. }
  23. @Override
  24. public void doFilter(ServletRequest request, ServletResponse response,
  25. FilterChain filterChain) throws IOException, ServletException {
  26. //由于拦截器定义的拦截规范是/* ,所以所有的请求都会被拦截,为了防止死循环 开一个特例显示具体的访问结果
  27. if(((HttpServletRequest)request).getRequestURI().contains("forbid.jsp")){
  28. filterChain.doFilter(request, response);
  29. return;//不加return 会继续执行请求。
  30. }
  31. String remoteAddr = request.getRemoteAddr();
  32. if(forbidIps!=null){
  33. for (int i=0; i<forbidIps.length; i++) {
  34. if(forbidIps[i].equals(remoteAddr)){
  35. //如果访问的ip与配置的ip相等 则直接过滤掉。
  36. ((HttpServletResponse)response).sendRedirect("forbid.jsp");
  37. return;
  38. }
  39. }
  40. }
  41. filterChain.doFilter(request, response);
  42. }
  43. @Override
  44. public void init(FilterConfig filterConfig) throws ServletException {
  45. //获取在web.xml中配置的<filter>的初始化参数
  46. String initParamter = filterConfig.getInitParameter("forbidIps");
  47. if(initParamter != null){
  48. forbidIps = initParamter.split(",");
  49. }
  50. }
  51. }

web.xml中的配置如下:

  1. <!-- ip过滤器 -->
  2. <filter>
  3. <filter-name>ipFilter</filter-name>
  4. <filter-class>com.chenghui.util.IpFilter</filter-class>
  5. <init-param>
  6. <param-name>forbidIps</param-name>
  7. <param-value>192.168.1.108,192.168.6.89,192.168.6.99</param-value>
  8. </init-param>
  9. </filter>
  10. <filter-mapping>
  11. <filter-name>ipFilter</filter-name>
  12. <url-pattern>/*</url-pattern>
  13. </filter-mapping>


好了,IpFilter过滤器定义完毕了,然后部署项目,在浏览器中运行试试看,效果如下:  

/uploads/answer/20200819/8ad555cef73e6b1ea51fc44af8506be8.png

要回复问题请先登录注册