16
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

URLのページパラメーターを暗号化して渡す/受け取る

Last updated at Posted at 2015-05-14

はじめに

BookmarkablePageLinkを使って、値をもたせたページ遷移させると
URL欄に情報がそのまま出てしまうのでなんとかしたかった。

スクリーンショット 2015-05-14 11.17.45.jpg

実装画面

フォームから値を送ると
スクリーンショット 2015-05-14 10.27.56.jpg

URLに追加されるページパラメーターが難読化されている
スクリーンショット 2015-05-14 11.04.12.jpg

ソース

ページパラメーターのエンコーダー・デコーダーを指定すればいいみたい。
参考:[wicket user-guide] (http://ci.apache.org/projects/wicket/guide/6.x/guide/single.html#urls_6) の
Controlling how page parameters are encoded with IPageParametersEncoder っていう節

まずはIPageParametersEncoderを実装した CryptoPageaParametersEncoderを作成

CryptoPageParametersEncoder
public class CryptionPageParametersEncoder implements IPageParametersEncoder{
		
	@Override
	public PageParameters decodePageParameters(Url url) {
		
		PageParameters parameters = new PageParameters();

		int i = 0;
		for (String s : url.getSegments())
		{
			parameters.set(i, s);
			++i;
		}

		for (QueryParameter p : url.getQueryParameters())
		{
			//各パラメーターの暗号化を解除する処理
			parameters.add( 復号化メソッド(p.getKey(),p.getValue())));
			
		}

		return parameters.isEmpty() ? null : parameters;
	}
	
	@Override
	public Url encodePageParameters(PageParameters pageParameters) {
		Url url = new Url();

		for (int i = 0; i < pageParameters.getIndexedCount(); ++i)
		{
			url.getSegments().add(pageParameters.get(i).toString());
		}

		for (PageParameters.NamedPair pair : pageParameters.getAllNamed())
		{
			String encryptedKey = "";
			String encryptedValue = "";
			
			//各パラメーターを暗号化する処理
			encryptedKey = 暗号化メソッドpair.getKey());
			encryptedValue = 暗号化メソッド(pair.getValue());
				 
			QueryParameter param = new QueryParameter(encryptedKey, encryptedValue);
			url.getQueryParameters().add(param);
		}		
		return url;
	}	
}

次に、Applicationクラスのinitメソッドで、暗号化してやりとりを行いたいページに上記エンコーダーをマウントする。

MyApplication.java
public class MyApplication extends WebApplication {
    public MyApplication() {
    }

    /**
     * @see org.apache.wicket.Application#getHomePage()
     */
    @Override
    public Class getHomePage() {
    	return Page1.class;
    }
    
    @Override
    protected void init() {
    	super.init();
    
    	//Page2ページに作成したエンコーダーをマウント
    	mount(new MountedMapper("/cryptedPageParameter/", Page2.class, new CryptionPageParametersEncoder()));
    }

終わりに

最初このやり方がわからなくて、パラメータを各ページのコンストラクタで暗号・復号化してたから大変だった。
勉強になりました。ありがとう [wicket user-guide] (http://ci.apache.org/projects/wicket/guide/6.x/guide/single.html)

16
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?