2014-12-02 106 views
0

我已經發布了使用spring啓動的spring web服務。在WsConfigurerAdapter中,我使用了帶有SimplePasswordValidationCallback的XwsSecurityInterceptor來驗證用戶,這很好。Spring WS UsernameToken認證+通過spring-boot進行會話管理

web配置,

@Bean 
XwsSecurityInterceptor securityInterceptor() { 
    XwsSecurityInterceptor securityInterceptor = new XwsSecurityInterceptor(); 
    securityInterceptor.setCallbackHandler(callbackHandler()); 
    securityInterceptor.setPolicyConfiguration(new ClassPathResource("securityPolicy.xml")); 
    return securityInterceptor; 
} 

@Bean 
CallBackHandlerHelper callbackHandler() { 
    CallBackHandlerHelper callbackHandler = new CallBackHandlerHelper(); 
    callbackHandler.loadUsers(); // loading users from DB 
    return callbackHandler; 
} 

樣品皁報頭。

<soapenv:Header> 
    <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
    <wsse:UsernameToken wsu:Id="XWSSGID-14072105829651149256297" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:Username>admin</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">1</wsse:Password> 
    </wsse:UsernameToken> 
    </wsse:Security> 
</soapenv:Header> 

現在,我與這些02顧慮掙扎,

1)如何使用密碼消化和隨機數,比明文。 (在我的策略xml中,我已將它們設置爲false,並通過SOAP頭以明文格式加載wss:usernameToken,但我更喜歡獲取密碼摘要而不是plainText格式)。

2)我需要通過保持會話密鑰將此服務設置爲有狀態。不想每次都發送用戶/密碼。想法是隻使用用戶名令牌來登錄請求,並在此後用一個唯一的密鑰來管理會話,直到用戶發送註銷請求(希望將這個生成的會話密鑰保存在內存中,直到會話關閉)我怎麼能想到解決這個問題給定的上下文?

回答

0
  1. 對於消化,你會使用在你的安全策略文件如下:

    <xwss:UsernameToken digestPassword="true" useNonce="true"/> 
    

爲XWSS配置格式的參考文檔可以發現here

  • 我真的覺得你應該重新考慮,具有stageful服務時一般不贊成。例如參見this similar SO question,或者this onethis one等等。