2011-08-09 22 views
9

https Biz birlikte ulaşılabilir bir web sitesi var hem http ve httpsHttp yönlendirme

Biz tüm sayfaları iyi çalışıyor ancak kullanıcılar Sitesi giriş yaptığınızda tüm sayfalara ihtiyacımız olan http erişilmesi gereken

o

bize büyü ile bu

Teşekkür Srinivas

cevap

0

elde etmek kolay yoludur iletin https ile gösterilecek ihtiyacını doğrulanmış oldu.

Sadece şaka yapıyorum.

Kullanıcının oturum açıp açmayacağını denetleyen her sayfada çalışan bir rutininiz var, doğru mu? Peki, bu yordamda, mevcut URL'yi de kontrol eden ve zaten yoksa, https sürümüne yönlendiren bir mantık eklemeniz yeterlidir.

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

Sen Apache ile kolayca bunu başarabilirsiniz.

sen 'korumalı' yolunda iç içe kullanıcı içeriklerini var varsayarsak, bu ile başlayan '/ korumalı' HTTPS ana bilgisayara her isteğini iletecek:

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

bu yaklaşımı kullanarak URI geri kalanı olacak Kaybettiler ve kullanıcılar gitmek istedikleri yere tekrar gitmeliler.

+0

Tomcat'inizin önündeki bir Apache'niz varsa (ya da sahip olduğunuz herhangi bir uygulama sunucunuz) ;-) – n0rm1e

0

Kullanıcının giriş yapıp yapmadığını kontrol edin, ardından bağlantının HTTPS olup olmadığını kontrol edin.

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

Bir filtresi kullanabilirsiniz:

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

teşekkürler, bu doğru ve genel bir yoldur – necromancer

1

İşte İskelesi benim Scala çözeltisi (I hiçbir WAR İskelesi tek başına kullanıyorum) bulunuyor.

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}" 
    } 
    } 
} 

bağlantı noktaları 80, 8080, & c sunucuya bir konektör ekleyin. Bu işleyiciyi, işleyicilerin zincirinin önüne ekleyin.