Apache CXF - Set HTTP header

后端 未结 4 870
时光取名叫无心
时光取名叫无心 2021-01-04 00:01

I have to set some http header fields in a Apache CXF client:

I tried it via Interceptor:

    public class HttpHeaderInterceptor extends AbstractPhas         


        
4条回答
  •  春和景丽
    2021-01-04 00:34

    I Have solved my problem:

    adding the interceptor via xml configuration:

    
        
            
        
        
            
        
    
    

    in the client class I altered setHttpHeaderInterceptor to

    public void setHttpHeaderInterceptor(String userId, String xAuthorizeRoles){
        Client cxfClient = ClientProxy.getClient(this.servicePort);
        cxfClient.getRequestContext().put("HTTP_HEADER_HOST", "example.org");
        cxfClient.getRequestContext().put("HTTP_HEADER_USER_ID", userId);
        cxfClient.getRequestContext().put("HTTP_HEADER_X_AUTHORIZE-ROLES", xAuthorizeRoles);
    }
    

    the interceptor class

    @Override
        public void handleMessage(Message message) throws Fault {
            Map headers = (Map) message.get(Message.PROTOCOL_HEADERS);
            try {
                headers.put("Host", Collections.singletonList(message.get("HTTP_HEADER_HOST")));
                headers.put("KD_NR", Collections.singletonList(message.get("HTTP_HEADER_KD_NR")));
                headers.put("X-AUTHORIZE-roles", Collections.singletonList(message.get("HTTP_HEADER_X_AUTHORIZE-ROLES")));
            } catch (Exception ce) {
                throw new Fault(ce);
            }
        }
    

    and now it work's.

    With this approach I can set HTTP-Header fields at runtime.

提交回复
热议问题