1

私は、Web サービスを構築および展開するために JAX-WS を使用しています。

すべてが正常に機能していますが、WSDL を非表示にする必要があります。つまり、ユーザーがhttp://foo.com/wm-ws/WMService2?wsdlという URL にアクセスした場合、WSDL を表示したくありません。

@WSDL アノテーションを使用できると読んだので、次のようにしました。

@WebService(serviceName = "WMService2",
        targetNamespace = "http://test.wmservice.soap/",
        portName = "WMService2")
@WSDL(exposed = false)

public class WMService2
{
  ...
}

しかし、これは何も変更しません..WSDL はまだ表示されています。フィルターが作成される回避策を見てきましたが、やり過ぎだと思います。

何か案は?

4

1 に答える 1

2

まず、クライアントは実行時に WSDL を必要とする可能性があります。これは、手作りのクライアント コードを使用するか、WSDL のローカル コピーを含めることで回避できます (これには、EE 環境で少し魔法が必要です。つまり、アーティファクトに WSDL をパッケージ化し、wsimport で wsdl-location を指定します)。 (必要に応じて、より多くの情報を提供できます。これも有効なソリューションです: JAX-WS クライアント : ローカル WSDL にアクセスするための正しいパスは何ですか? ) これは依存関係について詳しく説明していますが、それを利用できるようにしておくこともお勧めします。相互運用性: Java クライアントの実行時に WSDL が必要なのはなぜですか?

そうは言っても、実際に達成しようとしているのは、Web リソースへのアクセスを制限することのように思えますが、これは web.xml で簡単に達成できます。具体的には、セキュリティ制約を追加できます。

<security-constraint>
    <web-resource-collection>
        <url-pattern>*?wsdl</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>

ただし、これはコンテナーで認証を設定し、クライアントで認証する必要があることを意味します(コンテナーとは何ですか? クライアントは?)。url-pattern は何でもかまいません。role-name * は、認証されたユーザーがリソースにアクセスできることを示します。

セキュリティ制約について: http://docs.oracle.com/cd/E19798-01/821-1841/bncbk/index.html

于 2013-06-12T17:39:21.517 に答える