如果您使用的是RESTful Webservices,我们可以使用一个过滤器,它可以根据模式过滤任何请求并过滤任何RESTful请求。但是,如果我们使用SOAP Web服务,我们就不能使用该过滤器从SOAP请求中获取任何信息,因为SOAP请求是作为有效负载发送的,并且只能读取一次。
我们有什么方法可以在JAX-WS中声明CXF或Handler中的拦截器,它可以拦截所有SOAP请求或基于正则表达式来拦截*等等。
要求是基本上从每个SOAP请求的头部获取授权令牌,并将其设置为线程上下文以供将来使用。上面提到的方式看起来是唯一的解决方案,因为我们不想手动为每个服务添加一个拦截器。
另一种解决方案是将授权令牌添加到httpheader并使用过滤器收集它。我们有什么方法可以将http标头添加到soap有效负载中吗?
请提供解决方案或建议。提前谢谢。
答案 0 :(得分:0)
您可以使用拦截器来访问消息
public class CustomInterceptor extends AbstractSoapInterceptor<SOAPMessage> {
public CustomInterceptor() {
super(Phase.RECEIVE);
}
@Override
public void handleMessage(SOAPMessage message) throws Fault {
//Use header to access the element, as I believe generally header is used carry authorization details
message.getSOAPHeader();
//Can be used to access body information
message.getSOAPBody();
}
}
您可以添加配置文件,如下所示
<jaxws:endpoint>
<jaxws:inInterceptors>
<ref bean="custInterceptor"/>
</jaxws:inInterceptors>
</jaxws:endpoint>
<bean id="custInterceptor" class="com.kp.CustomInterceptor">
答案 1 :(得分:0)
要将拦截器附加到所有端点,请使用cxf:bus
<cxf:bus>
<cxf:inInterceptors>
<ref bean="inWsMessageInterceptor"/>
</cxf:inInterceptors>
<cxf:outInterceptors>
<ref bean="outWsMessageInterceptor"/>
</cxf:outInterceptors>
<cxf:outFaultInterceptors>
<ref bean="outWsMessageInterceptor"/>
</cxf:outFaultInterceptors>
</cxf:bus>