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