我有一个基于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中设置任何内容,将该用户名传递给消息上下文中的后端服务吗?
谢谢!
答案 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" />