我有一個Angular + spring REST和Wicket混合應用程序。 Wicket提供UserPage類。這個UserPage包含我的JavaScript頁面。檢票器忽略來自Spring的302重定向
public class UserPage extends WebPage {
public UserPage() {
super();
}
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(JavaScriptHeaderItem.forUrl("https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"));
response.render(JavaScriptHeaderItem.forReference(new JavaScriptResourceReference(UserPage.class, "user.js")));
response.render(CssHeaderItem.forReference(new CssResourceReference(UserPage.class, "user.css")));
}
我實現了一個過濾器來檢查會話處於活動狀態,如果不是這種情況下,頁面應該重定向。
WicketSession s = WicketSession.get();
if (s == null) {
response.sendRedirect("/");
} else if (s.getUser() == null) {
response.sendRedirect("/");
} else {
filterChain.doFilter(request, response);
}
但是,當我沒有登錄運行此頁面時,瀏覽器收到302但不重定向。這隻發生在頁面通過檢票服務時。如果我手動去UserPage.html,它會重定向。
無論如何,任何人都知道爲什麼會發生這種情況?它肯定是wicket speficic,我還不熟悉檢票口。
當試圖到達/用戶,頁面停留,和HTML身體發送響應數據,其中我的腳本試圖解析和失敗(因此所有的空複選框)
有誰知道爲什麼wicket在發送302時不重定向?任何可能的修復線索?
你是怎麼定義你的filterChain的?如果WicketFilter位於您自己的篩選器Wicket之後,則應該無法干預。 –
啊是的,過濾器實際上是在彈簧過濾器之前執行的。 他們現在都重定向,但這導致了另一個問題。 當我在Spring過濾器的WicketSession中調用get()時,它會拋出一個org.apache.wicket.WicketRuntimeException:沒有應用程序附加到當前線程。 – user3761498
這實際上讓我問這個問題。通常,您需要將WicketSessionFilter添加到鏈中,以使Wicket對象(如會話)可用於非檢票代碼。仍然建議將wicket過濾器放在它的前面(如果此頁有時可以由Wicket提供)...也許你想查看Wicket身份驗證並在沒有用戶登錄會話時重定向到特定頁面? –