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