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
のような異なる暗号化メカニズムを簡単に実装できます。