zoukankan      html  css  js  c++  java
  • Java 过滤器Url通配符处理

    原文链接:https://blog.csdn.net/washingtin/article/details/102976660

     今天遇到项目中,加过滤器调试麻烦的问题。加上了一个过滤器来处理每次登录的问题。

    代码如下:

    1.  
      /**
    2.  
      * 将通配符表达式转化为正则表达式
    3.  
      *
    4.  
      * @param path
    5.  
      * @return
    6.  
      */
    7.  
      private String getRegPath(String path) {
    8.  
      char[] chars = path.toCharArray();
    9.  
      int len = chars.length;
    10.  
      StringBuilder sb = new StringBuilder();
    11.  
      boolean preX = false;
    12.  
      for (int i = 0; i < len; i++) {
    13.  
      if (chars[i] == '*') {//遇到*字符
    14.  
      if (preX) {//如果是第二次遇到*,则将**替换成.*
    15.  
      sb.append(".*");
    16.  
      preX = false;
    17.  
      } else if (i + 1 == len) {//如果是遇到单星,且单星是最后一个字符,则直接将*转成[^/]*
    18.  
      sb.append("[^/]*");
    19.  
      } else {//否则单星后面还有字符,则不做任何动作,下一把再做动作
    20.  
      preX = true;
    21.  
      continue;
    22.  
      }
    23.  
      } else {//遇到非*字符
    24.  
      if (preX) {//如果上一把是*,则先把上一把的*对应的[^/]*添进来
    25.  
      sb.append("[^/]*");
    26.  
      preX = false;
    27.  
      }
    28.  
      if (chars[i] == '?') {//接着判断当前字符是不是?,是的话替换成.
    29.  
      sb.append('.');
    30.  
      } else {//不是?的话,则就是普通字符,直接添进来
    31.  
      sb.append(chars[i]);
    32.  
      }
    33.  
      }
    34.  
      }
    35.  
      return sb.toString();
    36.  
      }
    37.  
       
    38.  
      /**
    39.  
      * 通配符模式
    40.  
      *
    41.  
      * @param excludePath - 不过滤地址
    42.  
      * @param reqUrl - 请求地址
    43.  
      * @return
    44.  
      */
    45.  
      private boolean filterUrls(String excludePath, String reqUrl) {
    46.  
      String regPath = getRegPath(excludePath);
    47.  
      return Pattern.compile(regPath).matcher(reqUrl).matches();
    48.  
      }
    49.  
       
    50.  
      /**
    51.  
      * 检验是否在非过滤地址
    52.  
      *
    53.  
      * @param excludeUrls
    54.  
      * @param reqUrl
    55.  
      * @return
    56.  
      */
    57.  
      private boolean checkWhiteList(String[] excludeUrls, String reqUrl) {
    58.  
      for (String url : excludeUrls) {
    59.  
      if (filterUrls(url, reqUrl)) {
    60.  
      return true;
    61.  
      }
    62.  
      }
    63.  
      return false;
    64.  
      }
    65.  
       

    测试代码:

    1.  
      public static void main(String[] args) {
    2.  
      String[] excludeUrl = new String[]{"/abf/*","/abd/**","*.login","*.html","*.jsp","/abg/login"};
    3.  
       
    4.  
      System.out.println(checkWhiteList(excludeUrl, "/abf/test/login"));
    5.  
       
    6.  
      }
  • 相关阅读:
    ubuntu系统安装Loadrunner压力机和负载端(linux agent)
    LoadRunner生成二进制参数的方法
    [02]树莓派无线USB网卡,Mercury WIFI配置
    6.4节“末端端接器的交流偏置”
    MIPS32的DIV和DIVU实现(除法指令)
    5.3节“开槽地平面的串扰”
    给自己挖坑
    电容降额
    MIPS32的ADDI和ADDIU的实现要点(加法指令)
    使用加法器实现减法
  • 原文地址:https://www.cnblogs.com/fswhq/p/13720125.html
Copyright © 2011-2022 走看看