在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会话)。
文件: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 。
注意
Wicket使用SunJceCrypt类作为默认URL编码和解码实现。
参考文献
翻译自: https://mkyong.com/wicket/how-do-encrypt-encode-url-in-wicket/