0

heroku Java アプリに SSL を設定しようとしています。http://devcenter.heroku.com/articles/sslに従って、secure.mydomain.com で SSL をセットアップしました。https://secure.mydomain.comを実行すると、すべてがうまく機能します。しかし、

1) すべての http トラフィックを https に転送するにはどうすればよいですか? 誰かがそうするためにサンプルコードを共有できますか? つまり、http://secure.mydomain.comにアクセスすると、 https://secure.mydomain.comに転送されます。

2) secure.mydomain.com のみの証明書を持っています。Godaddy で www.mydomain.com の CNAME をセットアップして、すべてのトラフィックをhttps://secure.mydomain.comに転送できますか?

つまり、 mydomain.com 、 www.mydomain.com 、および secure.mydomain.com へのすべてのリクエストをhttps://secure.mydomain.comに転送したいと思います。

前もって感謝します。

4

1 に答える 1

0

このコードは少しきれいにできると確信しており、いくつかのまれなケースを見逃す可能性がありますが、すべてのhttpトラフィックをにリダイレクトする汎用サーブレット フィルターを次に示しhttpsます。

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SecureFilter implements Filter {

    public void init(FilterConfig arg0) throws ServletException {}
    public void destroy() {}

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
            throws IOException, ServletException {

        HttpServletRequest hr = (HttpServletRequest) req;
        HttpServletResponse hs = (HttpServletResponse) res;

        if(req.isSecure() || 
            (hr.getHeader("X-Forwarded-Proto")!=null && 
             hr.getHeader("X-Forwarded-Proto").equals("https"))) {
            chain.doFilter(req,res);
        } else {
            hs.sendRedirect("https://"+
                            hr.getHeader("Host")+
                            hr.getRequestURI()+
                            (hr.getQueryString()!=null? "?"+hr.getQueryString():""));
        }
    }
}

に以下を挿入して、アプリに追加しますweb.xml

<filter>
    <filter-name>SecureFilter</filter-name>
    <filter-class>SecureFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SecureFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
于 2012-02-22T08:14:44.360 に答える