Java IP过滤器

我的这个项目用了SpringMVC
参考网上写了个IPFilter

/** * IP过滤器 
* @author zytim
* ip-pattern中配置允许访问的IP范围,允许"*"和"-" 
*/
public class IPFilter implements Filter {      
  private final static Logger logger = LoggerFactory.getLogger(IPFilter.class);
  private String ipPattern;
  public String getIpPattern() { 
     return ipPattern;   
  }
  public void setIpPattern(String ipPattern) {
      this.ipPattern = ipPattern;
   }
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
      this.ipPattern =PropertyUtil.getProperty("ip-pattern");
      //从properties配置文件中取参数,也可以从web.xml的param-value里取参数,参数以“;”隔开
      //this.ipPattern = filterConfig.getInitParameter("ip-pattern");
   }
   @Override
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)         throws IOException, ServletException {
      String ip = request.getRemoteHost();
      String reqUrl = ((HttpServletRequest) request).getRequestURI();
       if (reqUrl.contains("nouser")) {
            chain.doFilter(request, response);//进入下一个Filter
            return;
          }
        if (validateIP(ip, ipPattern)) { 
          //logger.info(ip+" is Permissible.");
            chain.doFilter(request, response);
        }
        else {
          logger.info(ip+" 拒绝访问。");//日志记录
          ((HttpServletResponse) response).sendRedirect("/nouser.jsp");
         }
     }
   @Override
   public void destroy() {
      // TODO Auto-generated method stub
  }

  /**
   * IP校验方法  
   * 功能描述: ip地址权限校验,允许"192.168.1.*"和"192.169.1.0-254"格式  
   * @param ipStr 请求ip 
   * @param ipPattern 权限ip列表 以;隔开  
   * @return 校验是否通过 
   *  
   */
   public static boolean validateIP(String ipStr, String ipPattern) { 
      if ( ipStr == null || ipPattern == null) {
         return false;
     }
     String[] patternList = ipPattern.split( ";");
//     for(String str : patternList){
//     System.out.println("Permissible IP:"+str);
//   }
//参数打印测试
     for (String pattern : patternList) {
       if ( passValidate(ipStr, pattern)) {        
         return true;  
         }
       }
       return false;
    }
    private static boolean passValidate(String ipStr, String pattern) {
       String[] ipStrArr = ipStr.split("\\."); 
       String[] patternArr = pattern.split("\\.");
       if ( ipStrArr. length != 4 || patternArr. length != 4) {
           return false; 
       }  
       int end = ipStrArr. length;  
       if ( patternArr[3].contains( "-")) {  
          end = 3;  
          String[] rangeArr = patternArr[3].split( "-");  
          int from = Integer.valueOf(rangeArr[0]).intValue();  
          int to = Integer.valueOf(rangeArr[1]).intValue();  
          int value = Integer.valueOf(ipStrArr[3]).intValue();  
          if ( value < from || value > to) {  
            return false;  
         }  
      }   
      for ( int i = 0; i < end; i++) {  
         if ( patternArr[i].equals("*")) {   
           continue;  
        }   
        if (!patternArr[i].equalsIgnoreCase(ipStrArr[i])) {   
           return false;  
        }   
     }  
     return true; 
  }
}

配置web.xml,过滤所有.htm的请求:

<!-- IP filter -->
<filter> 
  <filter-name>IPFilter </filter-name>
  <filter-class>com.xiaoniu.auth.filter.IPFilter </filter-class>
  <init-param>
  <param-name>ip-pattern</param-name>
  <param-value> </param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>IPFilter </filter-name>
  <url-pattern>*.htm</url-pattern>
</filter-mapping>

之前在配置时 url-pattern 中使用的是 /*,过滤了所有的请求,包括读取css样式文件等操作,导致错误提示页面变成原始挫页。这里只配置后只过滤了.htm请求,过滤了对核心业务的访问,保留了测试和页面调用的文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,099评论 19 139
  • [手把手教程][JavaWeb]SSM框架验证、修复和实例 手把手验证上期的SSM项目:优雅的SpringMvc+...
    Clone丶记忆阅读 17,037评论 49 76
  • 没人会关心玛丽。她出生在印度,她的父亲是一名海关官员,工作很忙。她的母亲是一位很漂亮的女人,每天都忙于各种聚会。所...
    微凉_Elena阅读 11,201评论 0 2
  • 离别,月色不得不勉强温柔 我们在静默的月夜下相对而坐 你捧起酒杯喝下诀别的第一口 像喝下了彼此的哀愁 且在如此的情...
    長安之上阅读 138评论 0 0
  • 有这样的一座小村庄,居住着一群老人和小孩,他们每天都在努力的生活着,因为生活需要他们自己去创造,小孩的父母去外地打...
    A羽翼阅读 219评论 0 0