2011-08-09 13 views
9

हम एक वेबसाइट है कि साथ पहुँचा जा सकता है http और https दोनोंHttp के लिए https पुनर्निर्देशन

हम सभी पृष्ठों http जो ठीक काम कर रहा है, लेकिन जब उन साइट में लॉग इन किया हम सभी पृष्ठों की जरूरत के साथ पहुँचा जा करने की जरूरत है जो https के साथ प्रदर्शित करने के लिए

कृपया हमें बताएं कि सबसे आसान तरीका है इस

धन्यवाद श्रीनिवास

उत्तर

0
जादू के साथ

प्राप्त करने के लिए क्या करते हैं की जरूरत प्रमाणीकृत किया था।

बस मजाक कर रहे हैं।

आपके पास कुछ प्रकार का दिनचर्या है जो प्रत्येक पृष्ठ पर चलता है जो जांचता है कि कोई उपयोगकर्ता लॉग इन है या नहीं? खैर, बस उस दिनचर्या में कुछ तर्क जोड़ें जो वर्तमान यूआरएल की जांच करता है और https संस्करण पर रीडायरेक्ट करता है यदि आप पहले से नहीं हैं।

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

आप इसे आसानी से अपाचे के साथ प्राप्त कर सकते हैं।

मान लें कि आप 'सुरक्षित' पथ में नेस्ट उपयोगकर्ता सामग्री मिल गया है, इस के साथ शुरू '/ संरक्षित' अपनी HTTPS मेजबान के लिए हर अनुरोध आगे भेज देंगे:

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

इस दृष्टिकोण का उपयोग कर यूआरआई के बाकी हो जाएगा खो गया और उपयोगकर्ताओं को फिर से नेविगेट करना चाहिए जहां वे जाना चाहते हैं।

+0

मान लें कि आपके पास अपने टोमकैट (या आपके पास जो भी एप्लीकेशन सर्वर है) के सामने अपाचे है ;-) – n0rm1e

0

जांचें कि उपयोगकर्ता लॉग इन है या नहीं, तो जांचें कि कनेक्शन 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

आप एक फिल्टर इस्तेमाल कर सकते हैं:

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

धन्यवाद, यह सही और सामान्य तरीका है – necromancer

1

यहाँ घाट पर मेरे स्काला समाधान (मैं जेट्टी स्टैंडअलोन उपयोग कर रहा हूँ, कोई युद्ध) है।

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

पोर्ट 80, 8080, & ग पर सर्वर के लिए एक कनेक्टर जोड़ें। हैंडलर की श्रृंखला के सामने इस हैंडलर को जोड़ें।

संबंधित मुद्दे