我的网页上有一个用户可以登录的区域。这个区域
www.host.com/mypage/myarea
应该在https下。
问题是我的https正在另一台主机上运行:
www.something-foo.host.com/mypage/myarea
。 (负载均衡器的东西......我不知道为什么)
我的尝试是用@RequireHttps注释页面,而不是重写页面的网址。
但是如何以及在哪里?有人请一个例子吗?
感谢您的帮助。
答案 0 :(得分:1)
如果您真的想要使用Wicket,那么您最好的选择就是编写IRequestMapperDelegate
的实现,并在WicketApplication的onInit()
过程中设置它们。
为了让你知道如何做到这一点我写了一个强奸Wicket的HttpsMapper的例子:
setRootRequestMapper(new HttpsMapper(getRootRequestMapper(), new HttpsConfig(8080, 8443)) {
private final static String SUBDOMAIN = "www.something-foo.";
@Override
protected Scheme getSchemeOf(Request request) {
HttpServletRequest req = (HttpServletRequest) ((WebRequest) request).getContainerRequest();
// well that's basically cheating and not so nice... but we're not allowed to overwrite mapRequest()
// but that means that every request that doesn't start with the subdomain will be treated as HTTP aka
// insecure.
if (req.getServerName().startsWith(SUBDOMAIN) == false) {
return Scheme.HTTP;
}
return super.getSchemeOf(request);
}
@Override
protected String createRedirectUrl(IRequestHandler handler, Request request, Scheme scheme) {
// stolen from super implementation
HttpServletRequest req = (HttpServletRequest) ((WebRequest) request).getContainerRequest();
String url = scheme.urlName() + "://";
// except the part where we insert the subdomain
url += SUBDOMAIN;
url += req.getServerName();
if (!scheme.usesStandardPort(getConfig())) {
url += ":" + scheme.getPort(getConfig());
}
url += req.getRequestURI();
if (req.getQueryString() != null) {
url += "?" + req.getQueryString();
}
return url;
}
});
根据您的问题,我无法确定这是否是一个很好的解决方案......这实际上取决于Wicket上有多少框架正在运行。既然你没有提到任何我没有提及的事情。