2013-08-29 76 views
2

春天社會和安全專家,使用Spring Social,Spring安全性登錄後重定向到原始URL?

我有以下的使用情況:

  1. 用戶請求像http://www.foobar.com/foo/1001
  2. 匿名用戶的特定網址可以看到這個頁面,但不能發佈在本頁面評論。評論發佈部分由Spring安全保護。
  3. 用戶單擊登錄。它會彈出一個登錄窗口或將其重定向到登錄頁面。
  4. 用戶選擇使用Facebook ID登錄。
  5. 用戶使用FB登錄後,它將用戶重定向到http://www.foobar.com/foo/1001並授權。

我想知道如何使用Spring Social來做到這一點。非常感謝!!

+1

我不知道使用Spring社會,但你必須存儲在'HttpSession'提出的最後一個請求。邏輯完成後,您將發送一個重定向到前一個請求的路徑。 –

+0

這是一個我會嘗試的方法,如果我不使用Spring Security和Spring Social。 Spring安全性自動執行重定向。對於Spring Social,有一個登錄控制器,但我不知道它是如何工作的。我想它只支持一級重定向,這意味着您成功登錄社交賬戶後重定向到登錄頁面。 –

回答

0

您是否真的試過了解它是否有效? Spring安全會自動執行此操作。

如果您是匿名用戶並嘗試訪問需要特定權限的資源,spring security將存儲嘗試的URL並將您重定向到登錄頁面。成功登錄後,它將獲取嘗試的URL並將其重定向到那裏。

+0

是的。我已經嘗試過了。 Spring安全性在重定向到我請求的頁面上做得很好。不過,我正在使用春季社交。流程是您嘗試訪問受保護的URL,spring安全性會提示您登錄並將您重定向到登錄頁面。然後你選擇用Facebook登錄。春季社交將引導你到FB完成登錄。如果成功,它會將您重定向回登錄頁面,該頁面是您離開的原始URL,而不是您在登錄頁面之前請求的URL。 –

0

我只能設法通過複製/粘貼代碼來完成這項工作。

警告:我使用的ProviderSignInController來提供賬戶和登錄

ProviderSignInController允許使用SignInAdapter的手動登錄本地用戶帳戶基礎上,SocialConnection

在簽到方法:

public String signIn(String userId, Connection<?> connection, NativeWebRequest request) 

我有以下代碼:

HttpServletRequest req = (HttpServletRequest)request.getNativeRequest(); 
HttpServletResponse resp = (HttpServletResponse)request.getNativeResponse(); 

RequestCache rc = new HttpSessionRequestCache(); 
SavedRequest savedRequest = rc.getRequest(req, resp); 
String targetUrl = savedRequest.getRedirectUrl(); 
if(targetUrl != null){ 
    log.info("Redirecting to DefaultSavedRequest Url: " + targetUrl); 
    new DefaultRedirectStrategy().sendRedirect(req, resp, targetUrl); 
    hasSentRedirect = true; 
} 

我不得不通過SavedRequestAwareAuthenticationSuccessHandler的代碼來了解它是如何作爲彈簧安全的一部分工作的。

我很失望ProviderSignInController與Spring Security沒有真正聯繫。所以我們必須破解我們的方式來獲得相同的功能。 我也發現登錄事件也不會發布。

我最近問這個問題:Should I use both SocialAuthenticationFilter and ProviderSignInController together

相關問題