0

我有一个基于 WSO2 ESB WSDL 的代理服务,它使用 UsernameToken 场景进行保护。此包装器服务用于在 WSO2 应用程序服务器中部署为 .aar 文件的 Axis2 后端 Web 服务。我想要的是在后端服务中检索用于身份验证的用户名。

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

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

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

谢谢!

4

1 回答 1

1

我猜,您已经编写了一个类中介来从消息上下文中检索用户名。请注意,用户名不在突触消息上下文中。它位于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 中的突触配置将用户名设置为 HTTP 标头,如下所示。然后将标头值传递给 BE 服务

 <header name="UserName" value="Test" />
于 2014-01-16T02:56:45.427 回答