Как зашифровать/кодировать URL в Wicket

В Wicket закодировать или зашифровать URL-адрес - очень простая задача, эта функция предоставляется по умолчанию, вам просто нужно активировать ее.

Обычный URL калитки по умолчанию

http://localhost:8080/WicketExamples/?wicket:interface=:0:urlQueryPanel:

Wicket закодированный или зашифрованный URL

http://localhost:8080/WicketExamples/?x=YwbAGQPpvT9MHF2-6S6FwvocqYPuA

Чтобы включить эту функцию, вставьте следующий код в класс веб-приложений Wicket.

        @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);
}

В механизме шифрования на основе пароля «Солт» и «Счетчик итераторов» являются общедоступными, но с надежным ключом шифрования (session + UUID), как указано выше, это просто делает функцию кодирования URL Wicket очень сложной для декодирования, даже если у вас есть Исходный код калитки на руках.

Если вы считаете, что используемый по умолчанию механизм шифрования Wicket недостаточно безопасен, вы можете легко реализовать другой механизм шифрования, например AES или SHA .

Рекомендации

стратегии кодирования], https://cwiki.apache.org/WICKET/obfuscating-urls.html [Wicket

запутывающие URL-адреса]

ссылка://тег/URL/[URL]ссылка://тег/калитка/[калитка]