2011-11-18 29 views
4

我正在使用WSS4JInInterceptor嘗試對我的客戶端進行身份驗證。我已經能夠創造一個微不足道的例子。但是,我有一個問題。在我的應用程序中,我使用提供的用戶名和密碼嘗試打開到數據庫的連接。如果連接嘗試成功,則用戶已通過身份驗證,否則登錄嘗試將被拒絕。使用WSS4JInInterceptor我需要實現一個返回用戶密碼的回調。在我的安全計劃中,我無法訪問此密碼。我怎樣才能實現這樣的事情?當我不知道密碼時使用WS-Security進行身份驗證

我應該繼承WSS4JInInterceptor並破解它以提供密碼嗎?

回答

1

這裏你去了:下面你不會找到我使用回調處理程序,因爲不會真的需要(不是說你不能這樣做,但更簡單)。

<jaxws:endpoint id="myService" implementor="#myServiceImpl" address="/myService"> 
<jaxws:inInterceptors> 
<bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" /> 
<ref bean="myServiceInterceptor"/> 
</jaxws:inInterceptors> 
<jaxws:properties> 
<entry key="ws-security.ut.validator" value-ref="myServiceUsernameTokenValidator"/> 
<jaxws:properties> 
</jaxws:endpoint> 

<bean id=" myServiceInterceptor " class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> 
<constructor-arg>        
<map> 
    <entry key="action" value="UsernameToken" /> 
    <entry key="passwordType" value="PasswordText" /> 
    </map>   
</constructor-arg> 
</ bean> 

在我myServiceUsernameTokenValidator,我直接連接最多UserDetailService,正從DB哈希密碼,然後簡單地使用驗證

stringDigester.matches(passwordText, passwordDigest) 
1

難道你不能進行身份驗證,然後從數據庫中檢索用戶密碼?如果你可以請求它,你可能會很好地將它存儲在數據庫中。當然,您需要保護密碼和/或數據庫。

+0

該數據庫不保留明文密碼,只某種形式的散列。因此,即使與管理員用戶連接,也無法檢索明文密碼。 –

相關問題