我有一个wicket应用程序,可以部署在不同的环境中。其中一个环境是https代理后面的服务器(让我们称之为S)(我们称之为P),因此应用程序上的页面可以访问
https://P:443/path/mountedPackage/Page?params=values
在wicket 1.4中一切正常但是随着向wicket 1.5的迁移,请求URL被更改为
http://P:443/path/mountedPackage/Page?params=values
(https被http替换)导致“400 Bad Request”错误。我不知道为什么会这样,但它会破坏我对应用程序的外部链接。
注意:在提交表单并调用方法setResponsePage(Page.class)
之前我遇到了同样的问题,我通过设置不同的RequestTarget并在对应时手动添加“https”而不是“http”来解决它:
on wicket 1.4
component.getRequestCycle().setRequestTarget
(new RedirectRequestTarget("newURLWithPropperHttps"));
和wicket 1.5
component.getRequestCycle().scheduleRequestHandlerAfterCurrent(new
RedirectRequestHandler("newURLWithPropperHttps"));
但是现在我没有打电话给任何setResponsePage()
或类似的事情,这是在从外面跟踪正常链接时发生的。
有任何帮助吗?可以使用所示的相同解决方案,但我不知道在哪里实现它(我已经尝试了get()
的方法IRequestCycleProvider
,但这导致我出现了anohter错误)
答案 0 :(得分:1)
我通过编写自己的IRequestMapper
来解决问题,mapHandler()
的作用类似于默认值,但是方法final IRequestMapper o=getRootRequestMapper();
setRootRequestMapper(new IRequestMapper() {
[...]
@Override
public Url mapHandler(IRequestHandler r) {
Url u=o.mapHandler(r);
if (condition)
u.setProtocol("https");
return u;
}
});
将协议设置为https(如果必须的话)。
{{1}}
答案 1 :(得分:0)