星空网 > 软件开发 > Java

Apache CXF自定义拦截器

为什么设计**?
1.为了在webservice请求过程中,能动态操作请求和响应数据,CXF设计了**
**分类:
1.按所处的位置分:服务器端**,客户端**。
2.按消息的方向分:入**,出**。
3.按定义者分:系统**,自定义**。

 

客户端添加日志**

package com.client.interceptor;import java.util.List;import javax.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.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.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");  }}

 




原标题:Apache CXF自定义拦截器

关键词:Apache

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

境外离岸账户:https://www.goluckyvip.com/tag/34947.html
境外清关:https://www.goluckyvip.com/tag/34948.html
境外收款:https://www.goluckyvip.com/tag/34949.html
境外投资:https://www.goluckyvip.com/tag/34950.html
境外投资备案ODI:https://www.goluckyvip.com/tag/34951.html
境外账户和离岸账户:https://www.goluckyvip.com/tag/34957.html
海南岛琼海市旅游景点 琼海市的旅游景点:https://www.vstour.cn/a/363189.html
月活用户超20亿!万亿市值巨头对中国商家进一步开闸放流 :https://www.kjdsnews.com/a/1836412.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流