Apache CXF自訂攔截器,apachecxf

來源:互聯網
上載者:User

Apache CXF自訂攔截器,apachecxf

為什麼設計攔截器?
1.為了在webservice請求過程中,能動態操作請求和響應資料,CXF設計了攔截器
攔截器分類:
1.按所處的位置分:伺服器端攔截器,用戶端攔截器。
2.按訊息的方向分:入攔截器,出攔截器。
3.按定義者分:系統攔截器,自訂攔截器。

 

用戶端添加日誌攔截器

package com.client.interceptor;import java.util.List;import javax.xml.namespace.QName;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.headers.Header;import org.apache.cxf.helpers.DOMUtils;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.w3c.dom.Document;import org.w3c.dom.Element;public class AddUserInterceptor extends AbstractPhaseInterceptor<SoapMessage>{    private String name;    private String password;    /**     *      * @param name     * @param password     */        public AddUserInterceptor(String name,String password) {        super(Phase.PRE_PROTOCOL);//準備協議化時攔截        // TODO Auto-generated constructor stub        this.name=name;        this.password=password;    }    @Override    public void handleMessage(SoapMessage msg) throws Fault {        // TODO Auto-generated method stub        List<Header> headers = msg.getHeaders();                Document document = DOMUtils.createDocument();        Element rootEle = document.createElement("apple");        Element nameEle = document.createElement("name");        nameEle.setTextContent(name);        rootEle.appendChild(nameEle);                Element passwordEle = document.createElement("password");        passwordEle.setTextContent(password);        rootEle.appendChild(passwordEle);                headers.add(new Header(new QName("apple"), rootEle));        System.out.println("client handMwssage()....");    }}

 

 

伺服器端攔截器:

package com.service.interceptor;import javax.xml.namespace.QName;import org.apache.cxf.binding.soap.SoapMessage;import org.apache.cxf.headers.Header;import org.apache.cxf.interceptor.Fault;import org.apache.cxf.phase.AbstractPhaseInterceptor;import org.apache.cxf.phase.Phase;import org.w3c.dom.Element;public class CheckUser extends AbstractPhaseInterceptor<SoapMessage>{    public CheckUser() {        super(Phase.PRE_PROTOCOL);        // TODO Auto-generated constructor stub    }           /*    <Envelope>        <head>            <apple>                <name>bo ram</name>                <password>520</password>            <apple>        </head>        <Body>            <favorite>                <arg0>Tara</arg0>            <favorite>        </Body>    </Envelope>         */            @Override    public void handleMessage(SoapMessage message) throws Fault {        // TODO Auto-generated method stub        Header header = message.getHeader(new QName("apple"));        if(header!=null){            Element appleEle=(Element) header.getObject();            String name = appleEle.getElementsByTagName("name").item(0).getTextContent();            String password = appleEle.getElementsByTagName("password").item(0).getTextContent();            if("bo ram".equals(name)&&"520".equals(password)){                System.out.println("Server 通過攔截器");                return;            }        }                System.out.println("server 沒有通過攔截器。。。。。");        throw new Fault(new Exception("請求需要一個正確的使用者名稱和密碼"));    }}

 

用戶端

package com.cxf_client.client;import java.util.List;import org.apache.cxf.endpoint.Client;import org.apache.cxf.frontend.ClientProxy;import org.apache.cxf.interceptor.Interceptor;import org.apache.cxf.interceptor.LoggingInInterceptor;import org.apache.cxf.interceptor.LoggingOutInterceptor;import org.apache.cxf.message.Message;import com.client.interceptor.AddUserInterceptor;import com.client.simple3.Simple;import com.client.simple3.SimpleimplService;public class Simpleclient2 {    public static void main(String[] args) {        // TODO Auto-generated method stub            SimpleimplService simpleimplService = new SimpleimplService();             Simple simpleimplPort = simpleimplService.getSimpleimplPort();             //發送請求的用戶端資料             Client client = ClientProxy.getClient(simpleimplPort);             //用戶端出攔截器             List<Interceptor<? extends Message>> outInterceptors = client.getOutInterceptors();             outInterceptors.add(new AddUserInterceptor("bo ram", "520"));//             //用戶端入攔截器//             List<Interceptor<? extends Message>> inInterceptors = client.getInInterceptors();//             inInterceptors.add(new LoggingInInterceptor());                          String favorite = simpleimplPort.favorite("Tara");             System.out.println(favorite);                }}

 

 

 服務端

package com.service.server;import java.util.List;import javax.xml.ws.Endpoint;import org.apache.cxf.interceptor.Interceptor;import org.apache.cxf.interceptor.LoggingInInterceptor;import org.apache.cxf.interceptor.LoggingOutInterceptor;import org.apache.cxf.jaxws22.EndpointImpl;import org.apache.cxf.message.Message;import com.service.impl.Simpleimpl;import com.service.interceptor.CheckUser;public class SimpleServer2 {    public static void main(String[] args) {        // TODO Auto-generated method stub        String address="http://localhost:8848/simpleserver/simple";            Endpoint publish = Endpoint.publish(address, new Simpleimpl());            EndpointImpl endpointimpl=(EndpointImpl) publish;            //服務端入攔截器            List<Interceptor<? extends Message>> inInterceptors = endpointimpl.getInInterceptors();            inInterceptors.add(new CheckUser());//            //服務端出攔截器//            List<Interceptor<? extends Message>> outInterceptors = endpointimpl.getOutInterceptors();//            outInterceptors.add(new LoggingOutInterceptor());                        System.out.println("published");    }}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.