2016-03-26 99 views
0

我需要手動登錄用戶到由spring安全保護的應用程序。 我的情況是彈簧安全預先驗證的用戶登錄

  1. 用戶登錄到應用程序1.
  2. 我的春天應用程序的鏈接將可用。
  3. 當用戶點擊鏈接時,應用程序1會在我的spring應用程序中將加密數據發佈到不安全的url。
  4. 現在我的控制器會收到加密的數據並在應用程序1中調用一個web服務 ,加密的數據將被傳遞到web服務中,並且我得到一個帶有用戶名的響應。
  5. 一旦我得到用戶名。我不想重新認證。我只想設置用戶主體/認證對象並加載儀表板。

第1步到第4步正在工作。

在我的不安全的控制器(我得到加密的數據) 我有以下幾行,但這又是調用我的身份驗證管理器,並且我不想在此方案中再次進行身份驗證。我只想創建會話並設置用戶主體。

String username = application1.webservice(encoded data); 
    Authentication authentication = new UsernamePasswordAuthenticationToken(username,password); 
    SecurityContextHolder.getContext().setAuthentication(authentication); 
    return "redirect:/app"; 

注:我有基於表單的LDAP身份驗證的工作,我使用的Spring Security 3.2/Java的配置(如果用戶直接登錄到我的應用程序,這將被使用)

回答

0

SecurityContextPersistenceFilter負責在網絡請求開始時在SecurityContextHolder中設置SecurityContext。在網絡請求結束時,請求處理期間對SecurityContext的任何更改都將被複制到HttpSession

因此,當您更新SecurityContext中的Authentication時,此過濾器將在驗證請求結束時更新HttpSession

您能否確認JSESSIONID被髮回的身份驗證響應與所有後續請求上的身份驗證響應相同?

+0

嗨,謝謝你的回答。我添加了一個自定義驗證提供並解決。 – Mukun