如何在CXF中修改JAX-WS响应的HTTP头?
我一直致力于开发CXF web服务,该服务位于安全代理之后,该代理要求在服务调用之前进行HTTP基本身份验证。这些服务相互之间进行通信,并要求对请求和响应进行身份验证 到目前为止,我已经能够通过HttpConductor为请求设置HTTP基本身份验证,如下所示:如何在CXF中修改JAX-WS响应的HTTP头?,http,header,jax-ws,cxf,response,Http,Header,Jax Ws,Cxf,Response,我一直致力于开发CXF web服务,该服务位于安全代理之后,该代理要求在服务调用之前进行HTTP基本身份验证。这些服务相互之间进行通信,并要求对请求和响应进行身份验证 到目前为止,我已经能够通过HttpConductor为请求设置HTTP基本身份验证,如下所示: Client client = ClientProxy.getClient(port); HTTPConduit conduit = (HTTPConduit) client.getConduit(); Auth
Client client = ClientProxy.getClient(port);
HTTPConduit conduit = (HTTPConduit) client.getConduit();
AuthorizationPolicy authorizationPolicy = new AuthorizationPolicy();
authorizationPolicy.setUserName(username);
authorizationPolicy.setPassword(password);
authorizationPolicy.setAuthorizationType("Basic");
conduit.setAuthorization(authorizationPolicy);
上面的方法在每次服务方法调用时都会被调用,我将以
INFO: Inbound Message
----------------------------
ID: 1
Address: http://someURL/someService?wsdl
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml; charset=UTF-8
Headers: {Accept=[*/*], Authorization=[Basic {TOKEN}],
cache-control=[no-cache], connection=[keep-alive],
Content-Length=[735], content-type=[text/xml; charset=UTF-8],
pragma=[no-cache], ...}
Payload: <soap:Envelope>...</soap:Envelope>
--------------------------------------
没有得到想要的结果。一种方法是创建一个 并将其注册为一个外挂式拦截器
<bean id="basicAuthOutInterceptor class="BasicAuthOutInterceptor" />
<cxf:bus>
<cxf:outInterceptors>
<ref bean="basicAuthOutInterceptor"/>
</cxf:outInterceptors>
<cxf:outFaultInterceptors>
<ref bean="basicAuthOutInterceptor"/>
</cxf:outFaultInterceptors>
</cxf:bus>
一种方法是创建一个新的应用程序 并将其注册为一个外挂式拦截器
<bean id="basicAuthOutInterceptor class="BasicAuthOutInterceptor" />
<cxf:bus>
<cxf:outInterceptors>
<ref bean="basicAuthOutInterceptor"/>
</cxf:outInterceptors>
<cxf:outFaultInterceptors>
<ref bean="basicAuthOutInterceptor"/>
</cxf:outFaultInterceptors>
</cxf:bus>
public class BasicAuthOutInterceptor extends AbstractPhaseInterceptor<Message> {
public BasicAuthOutInterceptor() {
super(Phase.PRE_STREAM);
}
@Override
public void handleMessage(Message message) throws Fault {
String token = "basic auth token";
@SuppressWarnings("unchecked")
Map<String, List<String>> headers = (Map<String, List<String>>) message
.get(Message.PROTOCOL_HEADERS);
if (headers == null) {
headers = new TreeMap<String, List<String>>(
String.CASE_INSENSITIVE_ORDER);
message.put(Message.PROTOCOL_HEADERS, headers);
}
headers.put("Authentication", Arrays.asList("Basic "+ token));
}
}
<bean id="basicAuthOutInterceptor class="BasicAuthOutInterceptor" />
<cxf:bus>
<cxf:outInterceptors>
<ref bean="basicAuthOutInterceptor"/>
</cxf:outInterceptors>
<cxf:outFaultInterceptors>
<ref bean="basicAuthOutInterceptor"/>
</cxf:outFaultInterceptors>
</cxf:bus>