2016-09-05 9 views
2

URLの特定の文字列を除外したかったのです。私はオンラインregテスターを使用して正規表現をテストし、それが動作します。struts.action.excludePattern not working

しかし、URLにアクセスすると、struts2は依然としてリクエストを処理しているようです。

除外を正しく設定しませんでしたか?

<constant name="struts.action.excludePattern" value="\/mystring$"/> 

enter image description here

私はStruts2のフレームワークから次のコードを抽出し、正規表現をテストするために私自身のテストクラスを作成しました。

public static List<Pattern> buildExcludedPatternsList(String patterns) { 
    if ((null != patterns) && (patterns.trim().length() != 0)) { 
     List<Pattern> list = new ArrayList(); 
     String[] tokens = patterns.split(","); 
     for (String token : tokens) { 
      System.out.println("Token=" + token); 
      list.add(Pattern.compile(token.trim())); 
     } 
     return Collections.unmodifiableList(list); 
    } 
    return null; 
} 


public static boolean isUrlExcluded(String uri, List<Pattern> excludedPatterns) { 
    if (excludedPatterns != null) { 
     for (Pattern pattern : excludedPatterns) { 
      if (pattern.matcher(uri).matches()) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 
+0

私はここで値は正規表現にする必要がありますが、時にはそれは/単純な文字列としても –

+0

このようなことを知っている/ youcanlearnanything

+0

私はそれも$なしで動作するはずだと思います –

答えて

1

間違っています。パターンは

<constant name="struts.action.excludePattern" value=".*/mystring$"/> 

である必要があります。このパターンはURIに対してコンパイルされ、照合されます。コード

String uri = RequestUtils.getUri(request); 
for (Pattern pattern : excludedPatterns) { 
    if (pattern.matcher(uri).matches()) { 
     return true; 
    } 
} 
return false; 

それはあなたが最初にあなたのパターンは貪欲にする必要があります全体のURI文字列に対して一致するため。

+0

私はメソッドに対してそれをテストし、動作します。ありがとう! – youcanlearnanything

+0

/css、/ javascript /、/ imagesなどの静的コンテンツリソースを除外する必要がありますか? – youcanlearnanything

+0

いいえ、あなたはそれを必要とせず、Strutsの背後にありますが、静的コンテンツを提供するようにStrutsを設定できます。 –