3

Tomcat 7を使用して多くの異なるクライアントにデプロイされているJavaWebアプリケーションがあります。クライアントの1つが、SSLを必須にして、httpsが適用されるようにしたいと考えています。他のデプロイメントにはSSL証明書がないため、SSLなしのままにしておく必要があります。

web.xmlのsecurity-constraintタグを介してそれを適用する方法は知っていますが、単一のクライアントに特別なビルドを作成する手間を省き、これをデータベースパラメーターとして設定できるようにしたいと考えています。アプリケーションによって読み取られ、プログラムでSSLを適用するかどうか。

これは可能ですか?どうすればいいですか?

よろしくお願いします。

ジョナタス


更新:必要なのは、この特定の環境では、アプリケーションが自動的にpor 80をポート443にリダイレクトすることです。ポート80を無効にすることは、実行可能なオプションではありません。

4

2 に答える 2

3

を介して、接続が安全であるかどうかを検証するフィルターを定義できますServletRequest.isSecure。安全ではなく、コンテキスト内のアプリケーションが安全な接続を必要とする場合は、「https」エンドポイントにリダイレクトします。それ以外の場合は、続行します。

擬似コード:

public class SecureConnectionFilter implements Filter {
    private boolean requireSecure;

    @Override
    public void destroy() {
        return;
    }

    @Override
    public void doFilter(final ServletRequest request,
            final ServletResponse response, final FilterChain filterChain)
            throws IOException, ServletException {
        if(requireSecure && ! (request.isSecure())) {
            // Redirect to secure endpoint
        } else {
            filterChain.doFilter(request,  response);
        }
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // Determine wether the application in context is required
        // to be secure or not. If this information is not available
        // at startup time then defer this logic to `doFilter`
    }
}
于 2013-03-11T21:08:01.603 に答える
1

これが 1 つのクライアントのみの場合は、server.xml 内のプレーンな http コネクタ (および対応するポート) をコメント アウトし、安全なコネクタとポートのみを使用できるようにします。
シンプルなソリューションで、コードや他の展開に影響を与えず、クライアントは必要なものを手に入れることができます

更新:
https にリダイレクトできます。試す:

 <Connector port="80" protocol="HTTP/1.1"
               redirectPort="443"/>  

こちらもご覧ください

于 2013-03-11T19:58:57.710 に答える