[Seasar-user:22040] Re: SAStrutsのURLType

Hiroyuki Ohnaka [E-MAIL ADDRESS DELETED]
2015年 3月 14日 (土) 02:43:21 JST


大中です。

>   あまり動作を変えたくなければ、
>   UrlValidator#isValidAuthorityの、問題の箇所だけ書き換えて、
>   コピー実装しても行けるのではないかと思います。

私も、UrlValidatorのところの実装を置き換えるのが上策かな、と思います。

Commons Validatorのトラッキングに該当するチケットがあがってましたが、
事実上rejectされてました...

UrlValidator rejects top-level domains (TLDs) with more than 4 characters

https://issues.apache.org/jira/browse/VALIDATOR-216


On 2015/03/14 1:41, takeshi kato wrote:
> こんばんは、加藤と申します。
> 
> 少し調べてみたので、共有します。
> 
> 
> ■エラーになっている原因
>      トップレベル・ドメインが5文字以上の場合、不正なURLとして判定される 
> ようです。
> 
>      StrutsのFieldChecks#validateUrl にて、
>  org.apache.commons.validator.UrlValidator#isValid
>  を呼び出して、URLが正常か判定をしているようです。
> 
>  そこから呼び出している
> UrlValidator#iisValidAuthorityの以下の部分で、
>  tokyoドメインが、不正なURLと判定されてしまっていました。
> 
>  --------------------------------------
>             String topLevel = domainSegment[segmentCount - 1];
>              if (topLevel.length() < 2 || topLevel.length() > 4) {
>                  return false;
>              }
>  --------------------------------------
> 
>  トップレベルドメインの長さが、2~4文字である事しか想定されていないようで、
>  tokyoドメインは5文字なので、これに引っかかってしまっているようですね。
> 
>      試しに「http://hello.tokyo/hoge」で確認してみたところ、上記の部分で 
> 引っかかりました。
> 
>  最近はTLDも増えてきましたから、他のドメインでも十分起こり得ますね。
> 
> 
> ■解決案
>  S2FieldChecksを継承した独自バリデータを作成することで、
>  回避出来ませんでしょうか。
> 
>    以下のような独自バリデータクラスを作成し、
> 
> ---------------------------
> public class OriginalUrlChecks extends S2FieldChecks {
> 
>      private static final long serialVersionUID = 1L;
> 
>      public static boolean checkURL(final Object bean, final 
> ValidatorAction validatorAction, final Field field, final ActionMessages 
> errors, final Validator validator, final HttpServletRequest request){
>          //TODO TLDが5文字以上でも不正にならないような、URLチェックの実 
> 装が必要。
>      }
> }
> ---------------------------
> 
> 
>  validator-rules.xmlの以下の部分を、上記の独自バリデータメソッドを呼ぶ 
> ように書き換えることで、
>  回避出来ると思います。
> 
> ---------------------------
>         <validator name="url"
>              classname="org.apache.struts.validator.FieldChecks"
>                 method="validateUrl"
>           methodParams="java.lang.Object,
>                         org.apache.commons.validator.ValidatorAction,
>                         org.apache.commons.validator.Field,
>                         org.apache.struts.action.ActionMessages,
>                         org.apache.commons.validator.Validator,
>                         javax.servlet.http.HttpServletRequest"
>                depends=""
>                    msg="errors.url"/>
> ---------------------------
> 
>   あまり動作を変えたくなければ、
>   UrlValidator#isValidAuthorityの、問題の箇所だけ書き換えて、
>   コピー実装しても行けるのではないかと思います。
> 
> 
> よろしくお願いします。
> 
> 
> 
> 2015年3月13日 19:51 泉井透 <toru_izui @ evolveit.jp 
> <mailto:toru_izui @ evolveit.jp>>:
> 
>     こんにちは。
> 
>     SAStrutsのURLTypeバリデーションで、URLのチェックをしていますが、
>     .tokyoドメインだと不正なURLだと認識されようです。
> 
>     例:
>     http://hello.tokyo/
> 
>     どのようにすれば正常なURLと認識されるのか何方かご存じないでしょうか?
>     教えてください。
> 
> 
>     --
>     エボルブアイティワークス株式会社
>     泉井 透
>     SkypeID:izui.toru
>     tel:03-6457-8330
>     FAX:03-6457-8331
>     Mobile1:080-1286-4715
>     Mobile2:090-4127-5378
>     http://www.evolveit.jp
> 
>     EvolveITWorks Corporation.
>     toru izui
>     SkypeID:izui.toru
>     tel:+81-3-6457-8330 <tel:%2B81-3-6457-8330>
>     FAX:+81-3-6457-8331 <tel:%2B81-3-6457-8331>
>     Mobile1:+8180-1286-4715 <tel:%2B8180-1286-4715>
>     Mobile2:+8190-4127-5378 <tel:%2B8190-4127-5378>
>     http://www.evolveit.jp
>     _______________________________________________
>     Seasar-user mailing list
>     Seasar-user @ ml.seasar.org <mailto:Seasar-user @ ml.seasar.org>
>     https://ml.seasar.org/mailman/listinfo/seasar-user
> 
> 
> 
> 
> -- 
> --------------------------Lei Hau'oli Co.,Ltd. -----------------------
> 
> 加藤 健(Takeshi Kato)
> Mail: t.kato @ leihauoli.com <mailto:t.kato @ leihauoli.com>
> 携帯1: 090-8003-2117
> 携帯2: 080-9027-8873
> 
> 株式会社Lei Hau'oli (レイハウオリ)
> http://www.leihauoli.com/
> 〒150-0002
> 東京都渋谷区渋谷3-2-3 帝都青山ビル6F
> Tel: 03-5778-3639 Fax:03-5778-3642
> 
> ---------------------------------------------------------------
> 
> 
> _______________________________________________
> Seasar-user mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 


Seasar-user メーリングリストの案内