[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 メーリングリストの案内