2012-04-04 165 views
1

背景使用Spring Security

我們的網站兩級認證允許一個人在使用自己的註冊郵箱和密碼登錄。現在,我們希望允許用戶僅使用他們的Facebook身份進行註冊(作爲替代身份驗證方法)。我們打算這樣做使用Spring社會+ Spring Security的3.1

問題

有一個在網站上,需要你有一個密碼,不管你用什麼身份驗證提供者的部分。電子郵件註冊用戶不受此影響,但Facebook用戶是(因爲他們沒有密碼)。他們需要生成一個在一個偷懶的辦法(第一次Facebook的用戶點擊鏈接),因爲用戶的一小部分將使用這個功能(我們不希望所有Facebook用戶被打擾創建密碼時,他們寄存器)。

那麼,你將如何對此建模?

例如:我們知道可以定義一個名爲「REGISTERED_WITH_PASSWORD」的安全角色並使這些頁面僅可用於該角色。是否可以設置Spring,當登錄的「無密碼」Facebook用戶嘗試進入該頁面時,將他重定向到密碼創建頁面,以便他們可以創建並重試? (而不是將其作爲授權例外處理)。

還有其他想法嗎?任何優雅的設計都會受到歡迎,不管它是否依賴於Spring Sec 3.1特有的東西。

謝謝

回答

3

樸素實現的想法,也許是更好的方式存在:

  • 寫自定義過濾器並將其添加到springSecurityFilterChain
  • 要將過濾器活躍只爲URL想手動(如檢查URL )
  • 檢查用戶身份驗證類型和'登錄/密碼通過'標誌並重定向Facebook用戶無標誌登錄/密碼頁
  • 將「登錄名/密碼通過」標誌保存到會話中

SecurityContext保持原樣,所以此方法對於春天來說似乎是非侵入性的。

編輯:格式化

+0

關於第三步:您的意思是取消一個重定向過濾器鏈:? – Sebastian 2012-04-04 22:44:54

+0

@Sebastian,是的,爲facebook用戶調用'resp.sendRedirect'而不是'chain.doFilter'。 – alexkasko 2012-04-06 06:35:44