2017-03-21 67 views
0

我使用Apache-CXF創建我的web服務客戶端,該客戶端使用ws-security進行UsernameToken驗證。ws-security - 在每個請求中設置不同的用戶名和密碼

爲了使用相同的憑據爲每個請求我只是添加以下屬性我BindingProvider(即WS-端口):

Map<String, Object> ctx = bindingProvider.getRequestContext(); 
    ctx.put(SecurityConstants.USERNAME, "myUserName"); 
    ctx.put(SecurityConstants.PASSWORD, "myPassword"); 

但是,我怎麼可以設置不同的用戶名和密碼的每一個請求?是否有可能爲UsernameTokenInterceptor添加某種供應商功能以基於每個線程提供證書(例如,通過從ThreadLocal變量中讀取它們)?

作爲解決辦法我實現了一個SOAPHandler<SOAPMessageContext>修飾在SOAPHeaderSecurity/UsernameToken部分UsernamePassword值。但是,我更願意添加創建整個安全部分的現有SOAPHandler或向UsernameTokenInterceptor提供供應商功能。

回答

0

爲什麼你需要一個UsernameTokenInterceptor?只需使用從cxf生成的客戶端並從中獲取存根,然後修改即可。

東西線沿線的:

public yourResponse call(final String username, final String password) { 
    final YourService service = new YourService(); 
    final YourStub stub = service.getService(); 

    final Map ctx = ((BindingProvider)stub).getRequestContext(); 

    ctx.put("ws-security.username", username); 
    ctx.put("ws-security.password", password); 

    return stub.callYourMethod(); 
} 

所以,你可以把這個方法,並通過用戶名和密碼,因此您可以隨時改變它。

相關問題