2014-01-16 4 views
0

UsernameToken 시나리오로 보안되는 WSO2 ESB WSDL 기반 프록시 서비스가 있습니다. 이 래퍼 서비스는 WSO2 Application Server에서 .aar 파일로 배포 된 Axis2 백엔드 웹 서비스 용입니다. 내가 원하는 것은 백엔드 서비스에서 인증에 사용 된 사용자 이름을 검색하는 것입니다. WSO2 Application Server의 웹 서비스에서 UsernameToken 시나리오에서 사용자 이름 검색

나는 자바 코드 아래를 사용하여 사용자 이름을 얻으려고 노력하지만, 항상 다시 NULL 제공 : MessageContext가 램 파트 메시지 데이터를 저장하지 않는 것 같다

MessageContext msgContext = MessageContext.getCurrentMessageContext(); 
String username = (String)msgContext.getProperty(RampartMessageData.USERNAME); 

. 메시지 컨텍스트에서 백엔드 서비스에 해당 사용자 이름을 전달하도록 WSO2 ESB에서 설정할 수있는 항목이 있습니까?

감사합니다.

답변

1

나는 메시지 컨텍스트에서 사용자 이름을 검색하기 위해 클래스 조정자를 작성했습니다. 사용자 이름은 시냅스 메시지 컨텍스트에 없습니다. 이것은 axis2 메시지 컨텍스트에 있습니다. 중재자의 내부에서 다음 코드를 사용해보십시오. 그것은 나를 위해 일해 왔습니다.

 Axis2MessageContext axis2Msgcontext = (Axis2MessageContext) synCtx; 
    org.apache.axis2.context.MessageContext msgContext = axis2Msgcontext.getAxis2MessageContext(); 
    String userName = (String) msgContext.getProperty("username"); 

그렇지 않으면 BE 서비스 (사용자 이름)에서 사용자 이름을 검색 하시겠습니까? 그런 다음 사용자 이름을 BE 서비스로 전송해야합니다. HTTP 헤더 또는 다른 방법을 사용하여 사용자 이름을 BE 서비스에 보낼 수 있습니다. 그런 다음 Axis2 핸들러를 사용하여 검색 할 수 있습니다. 예를 들어 WSO2ESB에서 시냅스 구성을 사용하여 다음과 같이 HTTP 헤더에 사용자 이름을 설정할 수 있습니다. 그런 다음 헤더 값이 BE 서비스에 전달됩니다.

<header name="UserName" value="Test" /> 
+0

답장을 보내 주셔서 감사합니다. 두 번째 제안은 WSO2 AS에 배포 된 백엔드 서비스의 사용자 이름이 필요했기 때문에 사용했습니다. – Voicu

+0

WSO2 ESB 프록시 서비스의 inSequence에서 다음을 추가했습니다.

'그리고 백엔드 Axis2 서비스에서'String username = MessageContext.getCurrentMessageContext(). getEnvelope(). getHeader(). getFirstChildWithName (새로운 QName ("http://example.com", "username" , "abc")). getText();'. – Voicu