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

takeshi kato [E-MAIL ADDRESS DELETED]
2015年 3月 14日 (土) 01:41:24 JST


こんばんは、加藤と申します。

少し調べてみたので、共有します。


■エラーになっている原因
    トップレベル・ドメインが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>:

> こんにちは。
>
> 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
> FAX:+81-3-6457-8331
> Mobile1:+8180-1286-4715
> Mobile2:+8190-4127-5378
> http://www.evolveit.jp
> _______________________________________________
> Seasar-user mailing list
> 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
携帯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

---------------------------------------------------------------
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://ml.seasar.org/archives/seasar-user/attachments/20150314/735771fc/attachment.html>


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