Использование фильтров для перенаправления с HTTPS на HTTP - PullRequest
4 голосов
/ 22 февраля 2012

У меня есть несколько страниц в моем приложении, которые работают на https://localhost:8181, и несколько страниц, которые работают на http://localhost:8080.I, хотят перейти с https на http, но не уверены, как это сделать. Я знаю, что необходимо использовать фильтр, который управляет перенаправлением с https на http и с http на https.

Я посмотрел по этой ссылке [Как перейти с HTTPS на HTTP в вашем веб-приложении] [1]

[1]: https://blogs.oracle.com/jluehe/entry/how_to_downshift_from_https но связь, где используются фильтры, не работает .. У меня нет четкого представления о том, что должно быть сделано внутри фильтров ...

В моем web.xml `

  <filter>
      <filter-name>Non SSL port</filter-name>
      <filter-class>SSLFilter</filter-class>
      <init-param>
      <param-name>httpPort</param-name>
      <param-value>8080</param-value>
    </init-param>   
    </filter>

    <filter-mapping>
    <filter-name>NON SSL pages</filter-name>    
    <url-pattern>/pages/success.xhtml</url-pattern>
    <url-pattern>/pages/failure.xhtml</url-pattern>
    <url-pattern>/pages/about.xhtml</url-pattern>
   </filter-mapping>`

Может кто-нибудь подсказать мне, что нужно сделать внутри фильтра, чтобы переключение между https на http было плавным.

Я использую Glassfish 3.1.1 и JSF.

1 Ответ

6 голосов
/ 16 апреля 2012
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 HttpsRedirectFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response, 
                      FilterChain chain) throws IOException, ServletException {

    if(request instanceof HttpServletRequest
         && response instanceof HttpServletResponse) {
        HttpServletRequest httpReq = (HttpServletRequest) request;
        String redirectTarget = httpReq.getRequestURL().toString();
        redirectTarget = redirectTarget.replaceFirst("https", "http")
        redirectTarget = redirectTarget.replaceFirst(":8443", ":8080");  
        redirectTarget = redirectTarget.replaceFirst("home", "home.do");  
        if(request.isSecure()) {                   
            ((HttpServletResponse)response).sendRedirect(redirectTarget);  
        } else {  
            chain.doFilter(request, response);  
        }  
    }  
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...