且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在 CXF 中修改 JAX-WS 响应的 HTTP 标头?

更新时间:2023-09-11 22:14:40

一种方法是创建一个 CXF 拦截器.

One approach would be creating a CXF interceptor.

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));
    }

}

并将其注册为 out and outFault 拦截器.

and registering it as an out and outFault interceptor.

    <bean id="basicAuthOutInterceptor class="BasicAuthOutInterceptor" />

    <cxf:bus>
        <cxf:outInterceptors>
            <ref bean="basicAuthOutInterceptor"/>
        </cxf:outInterceptors>
        <cxf:outFaultInterceptors>
            <ref bean="basicAuthOutInterceptor"/>
        </cxf:outFaultInterceptors>        
    </cxf:bus>