2009-08-05 23 views
3

セキュリティで保護されていないページに私のアプリケーションの安全なページへのリンクを埋め込みたいと考えています。 secure tomcatポートは、server.xmlファイルで設定されています。いくつかの展開では、それは443,8443などです。 私が必要とするのは、リンクで使用するようにTomcat設定から安全なポートを読み取る方法です。それは可能ですか?Tomcat:Javaで安全なポート番号を取得する方法は?

また、(要求のコンテキスト内から)server.xml設定にアクセスし、ポート番号を把握するためにそれを解析するだけでも問題はありませんが、あまり望ましくありません。

私はいくつかのコネクタといくつかの安全なものが存在する可能性があることを認識していますので、どちらを選択するかはプログラムのロジックに任せます。問題は - どうすればその情報を入手できますか?

ありがとうございます!

答えて

3

私は確かにそれのためのAPIはないと確信しています。おそらくweb.xmlのサーブレット環境変数を介して設定可能にしておくことができます。明らかな欠点は、SSLポート番号が2つ設定されていることです。

別のアプローチは、それがある方ポート、あなただけのログインページへの通常のリンクを使用することができ、およびTomcatが自動的にSSLコネクタにredictsを送信する必要がありますIIRC web.xmlにセキュリティを設定する

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>MyLoginPage</web-resource-name> 
     <url-pattern>/login</url-pattern> 
     <http-method>GET</http-method> 
     <http-method>POST</http-method> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

のようなものですに設定します。

+0

セキュリティ制約の設定は、ページにSSLを使用するよう強制する最良の方法だと思います。セキュリティ制約を使用してページに強制的にSSLを使用する必要がない場合、ユーザーはhttpsプロトコルをhttpに置き換えて、sslなしで使用できます。 –

+0

+1秘密保護のため –

1

最も簡単な解決策は、サーブレットのinit()メソッドでserver.xmlファイルを検索し、解析し、ポート番号をどこかに格納することです。サーブレットは自動ロードされる必要があります。

このコードをビルドスクリプトに入れ、ビルド時にweb.xmlファイルに値をコピーすることもできます。しかし、これは、同じTomcatをローカルにインストールするか、server.xmlファイルにリモートアクセスする必要があることを意味します。

サーブレットを早期に失敗させる可能性があるため、ポートを特定できないとWebアプリケーションが起動しないため、最初の解決策が好まれます。そうすれば、将来何らかの不特定の時間に不思議なエラーが起きることはなく、リクエストごとに時間を無駄にする必要はありません(ポート番号はTomcatを再起動しなければ変更できません)。

関連する問題