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

泉井透 [E-MAIL ADDRESS DELETED]
2015年 3月 16日 (月) 17:12:50 JST


加藤様、大中様

ご返事有難うございます、泉井です。

不具合があり、修正したら行けそうなことがわかりました。

ただ、自分のところだけ対応すれば良いという話ではなくなっていると思うので、
レポートをあげ、別途対応を検討して頂ければと思ってます。
https://www.seasar.org/issues/browse/SASTRUTS-133

当方では対応が急務ではないので、
上記にて対応方法が決まり次第今後どうするか考えたいと思います。

2015年3月14日 2:43 Hiroyuki Ohnaka <azusa @ fieldnotes.jp>:
> 大中です。
>
>>   あまり動作を変えたくなければ、
>>   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 mailing list
> Seasar-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-user


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