日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CXF - 拦截器

發布時間:2025/3/19 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CXF - 拦截器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

  • 服務器端自定義攔截器
  • package org.shi.cxf;import java.io.FileNotFoundException; import java.io.PrintWriter;import javax.xml.ws.Endpoint;import org.apache.cxf.ext.logging.LoggingOutInterceptor; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.jaxws.EndpointImpl; import org.shi.cxf.intecepter.AuthInteceptor; import org.shi.cxf.ws.HelloWorld; import org.shi.cxf.ws.QueryCatsByUser; import org.shi.cxf.ws.impl.HelloWorldImpl; import org.shi.cxf.ws.impl.QueryCatsByUserImpl;/*** Web Service 服務器端 主啟動類* @author xiaoshi**/ public class WSServiceStart {public static void main(String[] args) throws FileNotFoundException {//需要暴露的服務HelloWorld hw = new HelloWorldImpl();QueryCatsByUser queryCatsByUser = new QueryCatsByUserImpl();// 調用Endpoint 的 publish方法發布 Web Service 服務EndpointImpl ep = (EndpointImpl) Endpoint.publish("http://127.0.0.1/shiWS", hw);//自定義攔截器用來來接用戶名密碼等的信息ep.getInInterceptors().add(new AuthInteceptor());System.out.println("web Service 發布成功!");}}

    ?

    攔截器的實現

    package org.shi.cxf.intecepter;import java.util.List;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;/*** 自定義攔截器實現用戶名密碼等的攔截* @author xiaoshi**/ public class AuthInteceptor extends AbstractPhaseInterceptor<SoapMessage>{public AuthInteceptor() {super(Phase.PRE_INVOKE);//該攔截器將會 在 “調用之前” 攔截SOAP 消息}@Overridepublic void handleMessage(SoapMessage msg) throws Fault {System.out.println("------AuthInteceptor攔截到-----" + msg);List<Header> list = msg.getHeaders();if(list == null || list.size()<1) {throw new Fault(new IllegalArgumentException("用戶不合法,靜止訪問!"));}System.out.println(list.toString());}}

    ?

    然后用戶訪問的時候會被攔截到

    ?

    ? ?2 .客戶端自定義攔截器

    package org.shi.cxf;import org.apache.cxf.endpoint.Client; import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.shi.cxf.interceptor.AddHeaderInterceptor; import org.shi.cxf.ws.HelloWorld; import org.shi.cxf.ws.impl.HelloWorldServiceName;/*** web service 客戶端 啟動方法* @author xiaoshi**/ public class WSClientStart {public static void main(String[] args) {HelloWorldServiceName servieFactory = new HelloWorldServiceName();//此處返回的只是遠程Web Service的代理;HelloWorld hw = servieFactory.getHelloWorldImplPort();//自定義攔截器實現請求攔截(就是out攔截)Client client = ClientProxy.getClient(hw);client.getOutInterceptors().add(new AddHeaderInterceptor("shiye","123"));//設置消息頭client.getOutInterceptors().add(new LoggingOutInterceptor());//打印消息請求System.out.println(hw.sayHi("施爺"));}}

    ?

    package org.shi.cxf.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 AddHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage>{private String userName;private String pwd;public AddHeaderInterceptor(String userName,String pwd) {super(Phase.PREPARE_SEND); //在準備發送時啟用攔截器this.pwd = pwd;this.userName = userName;}@Overridepublic void handleMessage(SoapMessage msg) throws Fault {List<Header> list = msg.getHeaders();//創建Document對象Document doc = DOMUtils.createDocument();Element element = doc.createElement("authHeader");//創建服務器端要求的參數類型格式Element idElement = doc.createElement("userName");idElement.setTextContent(userName);Element pwdElement = doc.createElement("pwd");pwdElement.setTextContent(pwd);element.appendChild(idElement);element.appendChild(pwdElement);Header header = new Header(new QName("auth"),element);list.add(header);//添加消息頭}}

    ?

    ?

    ?

    轉載于:https://my.oschina.net/u/3677987/blog/3027498

    總結

    以上是生活随笔為你收集整理的CXF - 拦截器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。