Embedded Glassfishサーバーで実行される非常に単純なWebサービスがあります。
@Stateless
@Path("/id")
@Produces(MediaType.TEXT_HTML)
public class SimpleFacadeBean {
@GET
public String sayHello(@Context HttpServletRequest request, @Context HttpServletResponse response) {
return "Hello world!";
}
}
すべての Web サービス呼び出しのルート要素を設定する、対応するクラス:
@ApplicationPath("root")
public class ApplicationConfig extends Application {
}
すべて正常に動作しますが、この GET メソッドを SSL で保護したいと考えています。this、thisなどのマニュアルを読みました。SSL 接続の Glassfish 部分の構成には興味がありません (方法は知っています)。ただ、GET メソッドをlocalhost:8080/root/application.wadlリンクに表示したくないだけです (これは、私の Web サービスがデフォルトの非セキュア 8080 ポートではなく、8181 セキュア グラスフィッシュ ポートに接続されています)。この目的のために、web.xml 記述子を作成し、webapp/WEB-INF ディレクトリに配置しました。最も興味深い部分は次のようになります。
<security-constraint>
<display-name>SecurityConstraint</display-name>
<web-resource-collection>
<web-resource-name>Secure Area</web-resource-name>
<url-pattern>/root/id</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
しかし、実行後、( application.wadlで) Web サービスの URL がセキュリティで保護されていないポート (8181 ではなく 8080) に接続されていることがわかりました。コードを正しく機能させるために、他の多くの方法を試しました。私はまったく成功しませんでした。この Web サービスを .war にパッケージ化します。その後、この .war は .ear に移動します。application.wadlに「安全な」Webサービスが表示されないことに成功しない理由はありますか?