在WSO2应用服务器上的web服务中从UsernameToken场景检索用户名
我有一个基于WSO2 ESB WSDL的代理服务,它由UsernameToken场景保护。此包装器服务用于在WSO2应用程序服务器中作为.aar文件部署的Axis2后端web服务。我想要的是在后端服务中检索用于身份验证的用户名 我尝试使用下面的Java代码获取用户名,但它总是返回在WSO2应用服务器上的web服务中从UsernameToken场景检索用户名,wso2,axis2,wso2esb,rampart,Wso2,Axis2,Wso2esb,Rampart,我有一个基于WSO2 ESB WSDL的代理服务,它由UsernameToken场景保护。此包装器服务用于在WSO2应用程序服务器中作为.aar文件部署的Axis2后端web服务。我想要的是在后端服务中检索用于身份验证的用户名 我尝试使用下面的Java代码获取用户名,但它总是返回NULL: MessageContext msgContext = MessageContext.getCurrentMessageContext(); String username = (String)msgCon
NULL
:
MessageContext msgContext = MessageContext.getCurrentMessageContext();
String username = (String)msgContext.getProperty(RampartMessageData.USERNAME);
似乎MessageContext
没有存储Rampart消息数据。是否可以在WSO2 ESB中设置任何内容,以便将该用户名传递给消息上下文中的后端服务
谢谢大家! 我想,您已经编写了一个类中介来从消息上下文检索用户名。请注意,用户名不在synapse消息上下文中。它位于axis2消息上下文中。请尝试使用以下代码。。在你的调解人的内部。它一直在为我工作
Axis2MessageContext axis2Msgcontext = (Axis2MessageContext) synCtx;
org.apache.axis2.context.MessageContext msgContext = axis2Msgcontext.getAxis2MessageContext();
String userName = (String) msgContext.getProperty("username");
或者,是否要在BE服务(内部AS)中检索用户名?然后,您需要将用户名发送到服务。您可以使用HTTP标头或任何其他方法将用户名发送到BE服务。然后可以使用Axis2处理程序检索它。例如,您可以使用WSO2ESB中的synapse配置将用户名设置为HTTP头,如下所示。然后将头值传递给服务
<header name="UserName" value="Test" />
谢谢您的回答!我使用了您的第二个建议,因为我需要部署在WSO2上的后端服务中的用户名。对于其他可能需要此用户名的人:在WSO2 ESB代理服务的插入序列中,我添加了
,在后端Axis2服务中,我使用字符串username=MessageContext.getCurrentMessageContext().getEnvelope检索它().getHeader().getFirstChildWithName(新的QName()http://example.com“,”用户名“,”abc“)。getText();
。