HeroKod Годдади домен, настройка Java стека, SSL - PullRequest
0 голосов
/ 17 февраля 2012

Я пытаюсь настроить SSL для моего java-приложения heroku. Я следовал http://devcenter.heroku.com/articles/ssl, чтобы настроить SSL на secure.mydomain.com. Все отлично работает, если я https://secure.mydomain.com. Но,

1) Как перенаправить весь http-трафик на https? Может кто-нибудь поделиться примером кода для этого? то есть, если я перейду к http://secure.mydomain.com,, это должно перевести меня к https://secure.mydomain.com.

2) У меня есть сертификат только для secure.mydomain.com. Могу ли я настроить CNAME для www.mydomain.com в godaddy, чтобы перенаправить весь мой трафик на https://secure.mydomain.com.

Короче говоря, я бы хотел, чтобы все запросы к mydomain.com, www.mydomain.com и secure.mydomain.com пересылались на https://secure.mydomain.com.

Заранее спасибо.

1 Ответ

0 голосов
/ 22 февраля 2012

Я уверен, что этот код можно немного преобразить, и он может пропустить некоторые угловые случаи, но вот фильтр сервлетов общего назначения, который перенаправит весь трафик 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>
...