WicketのURLを暗号化/エンコードする方法
Wicketでは、URLのエンコードまたは暗号化は非常に簡単な作業です。この機能はデフォルトで提供されています。有効化する必要があります。
Wicketデフォルトの通常のURL
http://localhost:8080/WicketExamples/?wicket:interface=:0:urlQueryPanel:
Wicketエンコードまたは暗号化されたURL
http://localhost:8080/WicketExamples/?x=YwbAGQPpvT9MHF2-6S6FwvocqYPuA
この機能を有効にするには、WicketのWebアプリケーションクラスに次のコードを貼り付けます。
@Override protected IRequestCycleProcessor newRequestCycleProcessor() { return new WebRequestCycleProcessor() { protected IRequestCodingStrategy newRequestCodingStrategy() { return new CryptedUrlWebRequestCodingStrategy( new WebRequestCodingStrategy()); } }; }
完全な例を見る…
package com.mkyong; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.protocol.http.WebRequestCycleProcessor; import org.apache.wicket.protocol.http.request.CryptedUrlWebRequestCodingStrategy; import org.apache.wicket.protocol.http.request.WebRequestCodingStrategy; import org.apache.wicket.request.IRequestCodingStrategy; import org.apache.wicket.request.IRequestCycleProcessor; import com.mkyong.user.UserPage; public class WicketApplication extends WebApplication { @Override public Class<UserPage> getHomePage() { return UserPage.class;//return default page } @Override protected IRequestCycleProcessor newRequestCycleProcessor() { return new WebRequestCycleProcessor() { protected IRequestCodingStrategy newRequestCodingStrategy() { return new CryptedUrlWebRequestCodingStrategy( new WebRequestCodingStrategy()); } }; } }
完了しました。
ちょっと考えた
Wicketは、パスワードベースの暗号化メカニズムを使用してURLのエンコードとデコードを行っています。すべての必要なクラスは ”
wicket-1.4-rc1-sources.jar \ org \ apache \ wicket \ util \ crypt
“にあります。私は最も強力な機能は、個々のセッションのランダムな暗号化キーであると思う、それはセッションとUUIDを使用して、すべての訪問者が独自の暗号化キー(別のHTTPセッション)を使用するように使用します。
File:KeyInSessionSunJceCryptFactory.java
if (key == null) { //generate new key key = session.getId() + "." + UUID.randomUUID().toString(); session.setAttribute(keyAttr, key); }
パスワードベースの暗号化メカニズムでは、 “Salt”と “Iterator count”は公開されていますが、上記のような強力な暗号化キー(セッションUUID)を使用すると、WicketのURLエンコード関数を解読することが難しくなります。手のソースコード。
Wicketのデフォルトの暗号化メカニズムが十分安全でないと思うなら、
AES
や
SHA
のような異なる暗号化メカニズムを簡単に実装できます。