私はCXF User Guideを使って動作させようとしましたが、運がなかった。CXFフレームワークを使用してHTTP基本認証で保護されたWebサービスをどのように消費しますか?
私はJavaコードを使用してWebサービスを呼び出そうとしています。
私はCXF User Guideを使って動作させようとしましたが、運がなかった。CXFフレームワークを使用してHTTP基本認証で保護されたWebサービスをどのように消費しますか?
私はJavaコードを使用してWebサービスを呼び出そうとしています。
これは、JAX-WS仕様の対象です。基本的に、要求コンテキストのプロパティとしてユーザー名/パスワードを設定します。
((BindingProvider)proxy).getRequestContext().put(
BindingProvider.USERNAME_PROPERTY, "joe");
((BindingProvider)proxy).getRequestContext().put(
BindingProvider.PASSWORD_PROPERTY, "pswd");
実行時には、HTTPヘッダーにそれらが格納されます。
もっと良い方法がありCXFポートをキャストするだけでよいことに言及する価値はあります:BindingProvider portBP =(BindingProvider)port;portBP.getRequestContext()。put(BindingProvider.USERNAME_PROPERTY、 "username");portBP.getRequestContext()。put(BindingProvider.PASSWORD_PROPERTY、 "password"); – Francois
:
WSDLからJavaを生成する際に、オプションを追加し、 "真の-exsh":
WSDL2Javaの-exsh真-pのedu.sharif.ce http://wsdl.ir/WebServices/WebService.asmx?WSDL
と
UserCredentials user = new UserCredentials();
user.setUserid("user");
user.setPassword("pass");
ResearchWebService_Service service = new ResearchWebService_Service();
ResearchWebService port = service.getResearchWebService();
port.addNewProject(newProject, user);
HTTPリクエストヘッダーでBasic認証を有効にしてもよろしいですか?これはおそらく認証HTTPヘッダーを設定するのではなく、SOAPメッセージの中に資格を設定するでしょう。(文書が '暗黙的なSOAPヘッダー'で動作すると言うように) – Geert
独自の認証プロバイダを提供することができます。そうすれば、WDSL自体が基本的なHTTP認証によって保護されている場合にも動作します。
@WebServiceRef(wsdlLocation = "https://laka/sito?wsdl")
static XxxService service;
public static void main(String[] args) {
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "password".toCharArray());
}
});
service = new XxxService();
Xxx port = service.getXxxPort();
// invoke webservice and print response
XxxResponse resp = port.foo();
System.out.println(resp.toString());
}
'Authenticator.setDefault(Authenticator)'メソッドは静的であり、すべてのスレッドに適用されます。しかし、スレッドごとに異なる認証情報を保存するために 'ThreadLocal'変数を使用することでこれを回避するのは簡単です。 – Marco
'Authenticator.setDefault'は静的ですが、同期メソッドでもあります。本当にThreadLocalを使用する必要がありますか? –
このリンクはhttp://www.brimllc.com/2011/04/apache-cxf-client-setting-http-request-header-for-basic-authentication/comment同じ問題を解決するために私を助けました-page-1 /#comment-4313 –