2011-06-03 63 views
4

我有一個Java構建需要授權的應用程序。但是,驗證片由不同的/獨立的應用程序(不是Java)處理。用戶登錄到認證應用程序,該應用程序設置一個cookie。如果用戶有權訪問Java應用程序,它們將被授權應用程序重定向到Java應用程序的URL。以Spring Security 3與餅乾

我想使用Spring Security驗證/允許訪問Java應用程序之前檢查Cookie。什麼是最好的方法來做到這一點?在Java應用程序應該做如下:

  1. 檢查,看是否cookie存在
  2. 如果cookie存在,與數據庫驗證cookie的值。如果不是,將其發送給其他應用程序登錄
  3. 如果cookie是有效的,顯示的應用程序。如果沒有,請發送用戶到「身份驗證」應用程序。

任何想法?

+0

您是否已經在使用Spring Security?如果是這樣的版本? – sourcedelica 2011-06-03 21:45:09

+0

沒有。從Spring Security開始3 – qali 2011-06-06 13:01:42

回答

3

您可以通過自己的UsernamePasswordAuthenticationFilter做到這一點。在過濾器內部,您可以檢查您需要的cookie。您只需要覆蓋attemptAuthentication()方法。您有請求和響應對象,因此檢查cookie應該很容易。

您還需要實施UserDetailsService以檢查數據庫的用戶憑據。

  • This將幫助您在自定義過濾器上。
  • This是怎麼寫的一個UserDetailsService

您的命名空間的配置應該是這個樣子:

<http use-expressions="true" auto-config="false" entry-point-ref="yourEntryPointInApp1"> 

    <custom-filter position="FORM_LOGIN_FILTER" ref="myFilter" /> 
</http> 
<authentication-manager> 

    <authentication-provider user-service-ref="myDetailsService" /> 
</authentication-manager> 

另外要注意不要使用<formLogin>如果你決定實施過濾。

+0

@qali你以前用過春天嗎?如果沒有,我可以告訴你如何定義你的過濾器和細節服務bean。 – Simeon 2011-06-08 08:08:31

0

這種情況聽起來像SAML或OpenID的。如果是這樣的話,那麼Spring Security中應該已經有插件了。如果這是一個自定義認證方案,也許你可以做一些類似於插件的工作,因爲流程相似。

+0

是的,這是一個單獨的認證方案。我會看看這些插件。 – qali 2011-06-06 13:02:37