从WSO2 Application Server上的Web服务中的UsernameToken方案中检索用户名

时间:2014-01-16 00:20:37

标签: wso2 axis2 wso2esb rampart

我有一个基于WSO2 ESB WSDL的代理服务,该服务使用UsernameToken方案加以保护。此包装器服务用于在WSO2 Application Server中部署为.aar文件的Axis2后端Web服务。我想要的是在后端服务中检索用于身份验证的用户名。

我尝试使用以下Java代码获取用户名,但它总是回来NULL

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

似乎MessageContext不存储Rampart消息数据。我可以在WSO2 ESB中设置任何内容,将该用户名传递给消息上下文中的后端服务吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我想,您已经编写了一个类中介来从消息上下文中检索用户名。请注意,用户名不在synapse消息上下文中。它位于axis2消息上下文中。请尝试使用以下代码..在您的调解员内部。它一直在为我工作。

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

否则,您是否要在BE服务(AS内部)中检索用户名?然后,您需要将用户名发送到BE服务。您可以使用HTTP标头或任何其他方法将用户名发送到BE服务。然后,您可以使用Axis2处理程序检索它。例如,您可以使用WSO2ESB中的synapse配置将用户名设置为HTTP标头,如下所示。然后标题值将传递给BE服务

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