我使用的檢票1.4.7 +彈簧3.0 +彈簧安全3.0春季安全+還記得我的問題+檢票
問題是:春季安全通過cookie的認證用戶(記住我服務),但Wicket的AuthenticatedWebSession couldn」理解這一點並填充登錄面板。我如何解決它?
謝謝。
我使用的檢票1.4.7 +彈簧3.0 +彈簧安全3.0春季安全+還記得我的問題+檢票
問題是:春季安全通過cookie的認證用戶(記住我服務),但Wicket的AuthenticatedWebSession couldn」理解這一點並填充登錄面板。我如何解決它?
謝謝。
很古老的問題,但我在研究完全相同的問題時偶然發現了它。所以如果有人遇到這個問題,這是我的解決方案。
問題是AuthenticatedWebSession#isSignedIn()忽略SecurityContext並且檢查它自己的布爾標誌。由於不可能重寫最終方法#isSignedIn(),所以必須有一種解決方法。我已經走了一個自定義WebRequestCycle覆蓋#onBeginRequest()檢票開始處理當前請求之前同步狀態:
// MyApplication.java
public MyApplication extends AuthenticatedWebApplication {
// SNIP
@Override
public RequestCycle newRequestCycle(final Request request, final Response response) {
return new WebRequestCycle(this, (WebRequest) request, (WebResponse) response) {
@Override
protected void onBeginRequest() {
MySession.get().updateSignIn();
}
};
}
}
// MySession.java
public class MySession extends AuthenticatedWebSession {
// SNIP
void updateSignIn() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
signIn(auth != null && auth.isAuthenticated());
}
}
另外,AuthenticatedWebSession和AuthenticatedWebApplication可拋棄產品總數爲檢票認證 - 角色的休息不需要它們。它只需要從AuthenticatedWebApplication進行一些代碼複製,以使所有的工作都能以相似的方式工作。