2012-04-08 178 views
0

我想配置請求頭認證使用春天2.0安全性,我是一個完整的新手在它,所以請忍受我。從doc,他們給出了一個使用siteminder的示例配置文件。春天2.0安全配置

在我的場景中,請求標頭中將有一個用戶名和用戶組,分別使用CC_USER和CC_USER_GROUP的鍵。所以我調整了文件如下(見下文)。

我知道在外部系統中,用戶已經使用某種類型的單點登錄進行了身份驗證,並且當控件到達我的應用程序時,我們只需檢查CC_USER和CC_USER_GROUP的請求標頭。

問題1:下面的例子使用「userDetailsS​​ervice」。這是我需要實現的嗎?這是我將檢查CC_USER和CC_USER_GROUP的請求標頭嗎?

問題2:是否有一個完整的例子,我可以下載使用請求頭認證的地方?我做了大量的谷歌搜索,但沒有找到很多幫助。

問題3:我想對某些虛擬用戶進行測試,就像他們在文檔中做的一樣。我如何將以下內容合併到我的請求標題配置中?

<authentication-provider> 
    <user-service> 
     <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" /> 
     <user name="bob" password="bobspassword" authorities="ROLE_USER" /> 
    </user-service> 
    </authentication-provider> 

我修改樣本配置文件(基於文檔的SiteMinder文件):

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/context/spring-context-2.5.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-2.0.4.xsd"> 

    <bean id="ssoFilter" 
     class="org.springframework.security.ui.preauth.header.RequestHeaderPreAuthenticatedProcessingFilter"> 
     <security:custom-filter position="PRE_AUTH_FILTER" /> 
     <property name="principalRequestHeader" value="CC_USER" /> 
     <property name="authenticationManager" ref="authenticationManager" /> 
    </bean> 

    <bean id="preauthAuthProvider" 
     class="org.springframework.security.providers.preauth.PreAuthenticatedAuthenticationProvider"> 
     <security:custom-authentication-provider /> 
     <property name="preAuthenticatedUserDetailsService"> 
      <bean id="userDetailsServiceWrapper" 
       class="org.springframework.security.userdetails.UserDetailsByNameServiceWrapper"> 
       <property name="userDetailsService" ref="userDetailsService" /> 
      </bean> 
     </property> 
    </bean> 

    <security:authentication-manager 
     alias="authenticationManager" /> 
</beans> 

回答

1
  1. UserDetailsService只是一個接口,你需要實現。它只有一種方法可以通過用戶名從數據庫加載用戶,並返回帶有用戶信息的UserDetails對象(這裏也可以保留用戶組信息)。此服務與請求標題無關。我認爲,檢查請求標題的最佳位置是RequestHeaderPreAuthenticatedProcessingFilter
  2. 您是否在談論RequestHeaderAuthenticationFilter?我想,documentation非常清楚。如果您實現自己的用戶服務
+0

@真空 - 感謝您的回答

  • 在XML硬編碼的用戶將無法正常工作。對於#2,我真的需要看到一個能夠把所有東西放在一起的例子。 – dcp 2012-04-08 21:58:32

  • +0

    _RequestHeaderAuthenticationFilter_只是簡單地從頭中提取用戶名,所以如果你還需要建立一個USER_GROUP,你需要創建你自己的RequestHeaderAuthenticationFilter,並直接在過濾器方法中執行此操作。 也許這將有助於:http://teja.tejakantamneni.com/2008/08/spring-security-using-custom.html – vacuum 2012-04-08 22:05:16