2017-03-21 20 views
0

UsernameToken 인증과 함께 ws-security를 ​​사용하는 웹 서비스 클라이언트를 만들 때 Apache-CXF를 사용하고 있습니다. I가 다른 사용자와 암호를 설정하는 방법 그러나ws-security - 요청할 때마다 다른 사용자 이름과 암호를 설정하십시오.

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

: 모든 요청에 ​​난 그냥 내 BindingProvider (즉, WS-포트)에 다음 속성을 추가 동일한 자격 증명을 사용하기 위해

모든 요청? UsernameTokenInterceptor에 일종의 공급 업체 기능을 추가하여 (예 : ThreadLocal 변수에서 읽음으로써) 스레드별로 자격 증명을 제공 할 수 있습니까?

로서는 내가 SOAPHeaderSecurity/UsernameToken 부분에서 UsernamePassword 값을 수정하는 SOAPHandler<SOAPMessageContext> 구현 해결. 그러나 전체 보안 섹션을 만드는 기존 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(); 
} 

그래서 당신은 방법에 넣고 및 사용자 이름과 암호를 전달 따라서 당신은 언제든지 변경할 수 있습니다.