2011-09-14 82 views
4

我有一個可以部署在不同環境中的Wicket應用程序。其中這個環境是一個服務器(可以稱之爲S)後面的HTTPS代理(可以稱之爲P),從而Wicket正在更改請求URL

https://P:443/path/mountedPackage/Page?params=values 

一切都在檢票1.4,但在遷移到運行良好的應用程序的頁面訪問wicket 1.5,請求URL更改爲

http://P:443/path/mountedPackage/Page?params=values 

(https替換爲http)導致「400錯誤請求」錯誤。我不知道爲什麼會發生這種情況,但它會將我的外部鏈接暴露給應用程序。

注意:我提交表單,並調用方法setResponsePage(Page.class)時,在此之前同樣的問題,我通過設置不同的RequestTarget和手動添加「https」開頭解決它,而不是「HTTP」時,對應:

在檢票口1.4

component.getRequestCycle().setRequestTarget 
     (new RedirectRequestTarget("newURLWithPropperHttps")); 

和檢票1.5

component.getRequestCycle().scheduleRequestHandlerAfterCurrent(new 
    RedirectRequestHandler("newURLWithPropperHttps")); 

,但現在我不調用任何setResponsePage()或simil當它遵循來自外部的正常鏈接時發生。

任何幫助?可以使用相同的解決方案如圖所示,但我不知道在哪裏實現它(我試過get()的方法IRequestCycleProvider,但這導致我anohter錯誤)

+0

我不知道答案,但它聽起來像一個錯誤。 – biziclop

+1

感謝您的評論@biziclop,可能是這樣,我會盡力報告,看看開發人員說什麼。 與此同時,我通過寫我自己的'IRequestMapper'來解決這個問題,它的行爲像默認的那樣,但是方法'mapHandler()'將協議設置爲https(如果必須的話)。 'final IRequestMapper o = getRootRequestMapper(); setRootRequestMapper(新IRequestMapper(){' [...] '@覆蓋 公共地址mapHandler(IRequestHandler R){ 地址U = o.mapHandler(R); 如果(條件) u.setProtocol(」 https「); return u; } });'' – spuas

回答

1

我通過書面方式我自己IRequestMapper這就像一個默認但方法mapHandler()設置協議爲https,如果它有固定的問題。

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