2015-05-30 142 views
4

是否可以爲Spring Oauth2 Sso服務設置默認登錄成功?Spring-Security-Oauth2:默認登錄成功url

繼SZENARIO

  1. 瀏覽器reqeuests index.html
  2. SSO服務:不保護==>返回index.html
  3. 的index.html包含manifest屬性==>瀏覽器請求清單
  4. SSO服務:清單被保護==>返回401
  5. 客戶端重定向到${sso.host}/login
  6. SSO服務重定向到auth服務器
  7. 認證==>重定向回${sso.host}/login與在代碼查詢字符串
  8. SSO服務:請求令牌和重定向到清單文件

是否有方式不重定向到最後被保護的請求資源,但默認重定向到'index.html'?

請讓我知道,如果沒有辦法實現這個

+0

你能分享一些代碼,我沒有明確的你是什​​麼意思。這可以幫助嗎?:[setPreEstablishedRedirectUri](http://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/client/token/grant/redirect/AbstractRedirectResourceDetails.html#setPreEstablishedRedirectUri(java .lang.String)) – xedo

+0

嗨,謝謝你的時間。很難把它放在最小的代碼示例中。我明天再試。默認情況下,Spring Security在登錄後重定向到請求的最後一個資源,但被保護。因此,我可以指定一個loginSuccess url,但對於oauth我無法找到這樣的機制。我明天會看看你的提示。問題是有點老,我不得不提醒自己我已經發現了什麼 –

+0

對不起,但我目前無法提供一個最小代碼示例 –

回答

7

我有(我認爲)一個類似的問題:在我的情況下,一旦SSO請求成功,用戶被重定向到/,這不是我想要的。

有一個內置的解決方案需要一點挖掘才能找到。

AbstractAuthenticationProcessingFilter有一個方法setAuthenticationSuccessHandler,使您可以控制這一點,所以如果你有機會到OAuth2ClientAuthenticationProcessingFilter您可以將其設置爲你想要的。

如果你有類似教程的設置:https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_manual那麼你可以簡單地添加以下到在本教程中創建的OAuth2ClientAuthenticationProcessingFilter

OAuth2ClientAuthenticationProcessingFilter oauth2Filter = new OAuth2ClientAuthenticationProcessingFilter("/XXXProvider/login"); 
oauth2Filter.setAuthenticationSuccessHandler(new SimpleUrlAuthenticationSuccessHandler() { 
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { 
     this.setDefaultTargetUrl("/my_preferred_location"); 
     super.onAuthenticationSuccess(request, response, authentication); 
    } 
}); 
+0

有趣,這就是我一週前發現的解決方案,當我絆倒這個問題再次:) –

+0

HttpServletRequest是至多的庫? –

+0

這幫助了我,謝謝同志! –