2011-08-09 32 views
9

Tenemos un sitio web que se puede acceder con http y httpshttp a https redirección

Necesitamos todas las páginas sean accesibles por http que está trabajando bien, pero cuando los usuarios registran en el Sitio necesitamos todas las páginas que se había autenticado necesidad de mostrar con https

favor, haznos saber cuál es la forma más fácil de lograrlo

Gracias Srinivas

Respuesta

0

con la magia.

Es una broma.

Tiene algún tipo de rutina que se ejecuta en cada página que comprueba si un usuario está conectado, ¿correcto? Bueno, solo agregue un poco de lógica en esa rutina que también verifica la URL actual y redirige a la versión https si aún no lo hace.

if current url is not https: 
    redirect to replace(current url, 'http://', 'https://') 
0

Puede lograrlo fácilmente con Apache.

Suponiendo que tenga los contenidos de usuarios anidados en el camino 'protegido', esto reenviará todas las peticiones que empiezan con '/ protegido' en su servidor HTTPS:

# HTTP redirect configuration 
<VirtualHost *:80> 
    RewriteEngine on 
    RewriteRule ^/protected/ https://hostname/ [R] 
</VirtualHost> 

utilizando este enfoque, el resto del URI será perdido y los usuarios deben navegar de nuevo a donde quieren ir.

+0

Suponiendo que tiene un Apache en frente de su Tomcat (o el servidor de aplicaciones que tenga) ;-) – n0rm1e

0

Compruebe si el usuario está conectado, luego verifique si la conexión es HTTPS.

if (checkIfUserIsLoggedIn) { 
    $val = ((@$_SERVER['SERVER_PORT_SECURE'] == 1) || (@$_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://'; 
    if ($val == 'http://') { 
    // reload page if it not https 
    header('Location: https://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']); 
    } 
} 
8

Se puede usar un filtro:

public class MyFilter implements Filter { 
    private FilterConfig conf; 

    public void doFilter(ServletRequest request, ServletResponse response, 
      FilterChain chain) throws IOException, ServletException { 
     HttpServletRequest req = (HttpServletRequest)request; 
     HttpServletResponse resp = (HttpServletResponse)response; 
     if (req.getRemoteUser() != null && req.getScheme().equals("http")) { 
      String url = "https://" + req.getServerName() 
        + req.getContextPath() + req.getServletPath(); 
      if (req.getPathInfo() != null) { 
       url += req.getPathInfo(); 
      } 
      resp.sendRedirect(url); 
     } else { 
      chain.doFilter(request, response); 
     } 
    } 

    public FilterConfig getFilterConfig() { 
     return conf; 
    } 

    public void setFilterConfig(FilterConfig filterConfig) { 
     conf = filterConfig; 
    } 

    public void destroy() {   
    } 

    public void init(FilterConfig filterConfig) { 
     conf = filterConfig; 
    } 
} 
+0

gracias, esta es la forma correcta y general – necromancer

1

Aquí está mi solución Scala en el embarcadero (estoy usando embarcadero independiente, ninguna guerra).

class RedirectHandler extends ContextHandler { 
    override def doHandle(target: String, baseRequest: Request, 
     request: HttpServletRequest, response: HttpServletResponse): Unit = { 
    if ("http" == request.getScheme.toLowerCase) { 
     baseRequest setHandled true 
     response sendRedirect s"https://${request.getServerName}${request.getContextPath}" 
    } 
    } 
} 

Añadir un conector con el servidor en los puertos 80, 8080, & c. Agregue este controlador al frente de la cadena de manipuladores.