Java 呼叫Web service 新增認證頭(soapenv:Header)
前言
有時候呼叫web service 會出現
Message does not conform to configured policy [ AuthenticationTokenPolicy(S) ]: No Security Header found
這樣的錯誤。
以在 soapui 呼叫的結果來看, 會出現如下的返回
出現這種錯誤的原因 是webservice 的服務端需要提供 soap 認證的表頭。
舉例來說, 可能需要加上如下的認證頭:
(這個細部的格式和服務端的要求有關, 具體的username和pass也是服務端提供的)<soapenv:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1"> <wsse:UsernameToken> <wsse:Username>UserName</wsse:Username> <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">Password</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header>
在sopaui 呼叫的時候, 加上類似, 就能呼叫成功了。
在soapui 呼叫, 可以用以上方式來做。在把wsdl 轉為java 後, 又該如何加上認證的頭資訊呢?
cxf 加上認證頭
(以上的認證頭, 比較接近cxf 的呼叫方式。)
如果使用的是cxf生產的客戶端的程式碼。
在 _Client 呼叫的時候加上 如下程式碼:(在方法呼叫的程式碼之前)
Map<String, Object> props = new HashMap<String, Object>(); props.put(WSHandlerConstants.ACTION, WSHandlerConstants.USERNAME_TOKEN); props.put(WSHandlerConstants.PASSWORD_TYPE,WSConstants.PW_TEXT); props.put(WSHandlerConstants.USER, "UserName"); props.put(WSHandlerConstants.PW_CALLBACK_CLASS, PasswordHandler.class.getName()); WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(props); Client client = ClientProxy.getClient(port); client.getOutInterceptors().add(wssOut);
在client 的java 檔案中, 新增以下內部類
public static class PasswordHandler implements CallbackHandler { public void handle(javax.security.auth.callback.Callback[] callbacks) { for (int i = 0; i < callbacks.length; i++) { WSPasswordCallback pc = (WSPasswordCallback)callbacks[i]; pc.setPassword("password"); } } }
Axis2 加上認證頭
針對以上的認證頭在axis2 產生的java 檔案中如何新增呢(Axis2自動產生的java 檔案並不會自動產生main的測試檔案, 需要自己寫。 XXXXProxy.java 這是供呼叫的類檔案。 不過這些和新增認證頭關係不大)
axis2會產生一個 XXXXPortBindingStub.java 的檔案。 這裡面的內容就是實際的方法體。
找到我們需要呼叫的那個方法體:
在方法呼叫之前,加入以下程式碼:
//Begin add for Header
String AUTH_PREFIX = "wsse";
String AUTH_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
try{
SOAPElement wsSecHeaderElm = soapFactory.createElement("Security", AUTH_PREFIX, AUTH_NS);
SOAPElement userNameTokenElm = soapFactory.createElement("UsernameToken",AUTH_PREFIX, AUTH_NS);
SOAPElement userNameElm = soapFactory.createElement("Username",AUTH_PREFIX, AUTH_NS);
SOAPElement passwdElm = soapFactory.createElement("Password",AUTH_PREFIX, AUTH_NS);
passwdElm.setAttribute("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
userNameElm.addTextNode("vend_bmc01");
passwdElm.addTextNode("mediatek");
userNameTokenElm.addChildElement(userNameElm);
userNameTokenElm.addChildElement(passwdElm);
wsSecHeaderElm.addChildElement(userNameTokenElm);
SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(wsSecHeaderElm);
soapHeaderElement.setMustUnderstand(true);
_call.addHeader(soapHeaderElement);
}catch(Exception e)
{
e.printStackTrace();
}
//End add for Header
===》call method
java.lang.Object _resp = _call.invoke(XXXX);
原理很簡單。 加上類似xml 的頭, _call_addHeader
加上之後,再觸發方法 _call.invoke
相關推薦
Java 呼叫Web service 新增認證頭(soapenv:Header)
前言有時候呼叫web service 會出現Message does not conform to configured policy [ AuthenticationTokenPolicy(S) ]: No Security Header found 這樣的錯誤。以在 s
嵌入式linux網路程式設計,TCP、IP協議原理,wireshark抓包工具,乙太網頭(Ethernet header),IP頭,TCP頭,三次握手,四次握手,UDP頭
文章目錄 1,wireshark抓包工具 1.1,wireshark安裝 1.2,wireshark啟動 1.2.1,出現錯誤警告 1.2.2,解決方案 2,常用除錯測試工具 3,TCP
Java RESTful Web Service(Intellij+Tomcat+Jersey)
很多教程都到上一步為止,但執行Tomcat的時候會發現,並不能提供服務,因為依賴並沒有拷貝到web的lib下。 在Project Structure->Artifacts選擇Output Layout下Available Elements下所有的包,然後右鍵加入到web-INF/lib。
JAVA開發Web Service幾種框架介紹
需求 驚人的 總線 cast pri web服務 希望 uil blank 在講Web Service開發服務時,需要介紹一個目前開發Web Service的幾個框架,分別為Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,這是Java
eclipse中java Dynamatic web的創建過程(或者eclipse中jsp的創建或eclipse開發環境(jdk,eclipse,tomcat)的測試)
alt 進行 lan .cn ges log image oct ips 1.啟動eclipse程序。 2.File-New->Dynamatic web project,如圖 3.右擊項目名-->new-->New jsp file---> 點
Java RESTful Web Service實戰(第2版)pdf
images rep 漸進 網盤下載 調優 一點 進一步 image ctf 下載地址:網盤下載 內容簡介本書系統、深度講解了如何基於Java標準規範實現REST風格的Web服務,由擁有10余年開發經驗的阿裏雲大數據架構師撰寫,第1版上市後廣獲贊譽,成為該領域的暢銷書。第
Web Service 部分內容簡述(1)
DC 感受 名詞解釋 其他 通訊 封裝 對象 sax 基於web 1、什麽是Web服務(web service) Wb服務是一種可以用來解決跨網絡應用集成問題的開發模式,是基於網絡的、分布式的模塊化組件,它執行特定的任務遵守具體的技術規範,這些規範使得Web Ser
<<Java RESTful Web Service實戰>> 讀書筆記
protoc 交付 soap pro 內容 ica servlet容器 安全 soap協議 <<Java RESTful Web Service實戰>> 讀書筆記 第一章 JAX-RS2.0入門 REST (Representational
js呼叫Web Service方式
<!doctype html> <html lang="en"> <head> <meta cha
java呼叫命令提示符並返回結果(中文無亂碼)
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import
JAVA開發Web Service幾種框架介紹和選擇
下面分別介紹一個這幾種Web Service框架的基本概念1、JWS是Java語言對WebService服務的一種實現,用來開發和釋出服務。而從服務本身的角度來看JWS服務是沒有語言界限的。但是Java語言為Java開發者提供便捷釋出和呼叫WebService服務的一種途徑。2、Axis2是Apac
Java通過瀏覽器請求頭(User-Agent)獲取 瀏覽器型別,作業系統型別,手機機型
一:獲得瀏覽器請求頭中的User-Agent ? 1 String ua = request.getHeader("User-Agent") 二:獲得瀏覽器型別,作業系統型別:(注意,UserAgent類在U
java傳統web專案新增maven管理jar包,log4j無法正常輸出日誌
背景 筆者最近在給公司一個老的web專案改造升級,專案使用springmvc+mybatis,由於專案比較久遠,沒有使用maven管理jar版本,有可能是當時開發任務比較緊迫,不同的同事在不同的時期放入了jar版本各不相同, 看到那麼多混亂的jar,真是操心。筆者曾花了大概半個下午的時間,把jar版本
Java Web 生成Word文件(freemarker方式)
首先在pom檔案中加入下面這個依賴(不是Maven專案的話,把jar包匯入專案即可) <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</ar
Web Service零碎基礎知識+採用CXF訪問呼叫Web Service服務
1. Web Service體系結構的三個角色 服務提供者(Service Provider):提供服務的平臺,就是服務的生產者。 服務請求者(Service Requester):服務的消費者,需要請求特定功能的企業,就是查詢和呼叫服務的客戶端應用程式
使用axis2呼叫web service
使用axis2生成客戶端程式碼 下載axis2 , 點選這裡, 選擇 Binary distribution 下載後解壓,解壓進入到bin目錄 執行命令生成客戶端程式碼 -uri: 後可以接wsd
建立Windows server時呼叫web service介面時的幾個問題
問題1:提供的 URI 方案“https”無效,應為“http”。 引數名: via 解決方案: 在app.config配置檔案中,搜尋“https”,把"Https”全部修改為“http”; <httpsTransport authenticationScheme="Bas
Java呼叫C++編寫的動態庫(JNI)
1. 在eclipse裡利用java建立一個類,在類中加入帶有native的方法(eclipse建立的類會自動新增class在bin目錄下) 2.利用javah命令生成本地方法的c++標頭檔案。進入到工程bin目錄下,按住shift,並右擊,選擇 “在此處開啟命令視窗”,進入命令視
利用JDK自帶工具構建一個簡單的Java SOAP Web Service
這兩天由於工作的某些原因,需要了解一些關於Web Service的知識,然後在網上看到了這麼一篇簡單的有點略微過時但是對於初次接觸Web Service的同學來說又很有必要了解的文章,於是自己嘗試著將文章翻譯過來。 A. 構造Web服務 1. 構造一個簡單的hello
WEB後臺--基於Token的WEB後臺登入認證機制(並講解其他認證機制以及cookie和session機制)
繼續這一個系列,基於Token的WEB後臺登入認證機制(並講解cookie和session機制)。每個後端不得不解決的認證問題。 本系列: 文章結構:(1)JWT(一種基於 token 的認證方案)介紹並介紹其他幾大認證機