使用过滤器不工作将HTTP重定向到HTTPS

问题描述:

我想将http重定向到https,我找到的解决方案是使用过滤器来实现,我已经实现了用于将http协议重定向到https 的过滤器,但是当我尝试打开网站,我得到谷歌的错误, “尝试: 重装 页面清除Cookie ERR_TOO_MANY_REDIRECTS”使用过滤器不工作将HTTP重定向到HTTPS

我不限于使用过滤器,如果有其他的方法可以解决以上,请注明他们

public class HTTPSFilter implements Filter { 

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

     HttpServletRequest req = (HttpServletRequest) request; 
     HttpServletResponse res = (HttpServletResponse) response; 

     String uri = req.getRequestURI(); 
     String getProtocol = req.getScheme(); 
     String getDomain = req.getServerName(); 
     String getPort = Integer.toString(req.getServerPort()); 

     if (getProtocol.toLowerCase().equals("http")) { 

      // Set response content type 
      response.setContentType("text/html"); 

      // New location to be redirected 
      String httpsPath = "https" + "://" + getDomain + uri; 

      String site = new String(httpsPath); 
      res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY); 
      res.setHeader("Location", site); 
     } 

     // Pass request back down the filter chain 
     chain.doFilter(req, res); 

    } 

    @Override 
    public void init(FilterConfig arg0) throws ServletException { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void destroy() { 
     // TODO Auto-generated method stub 

    } 

} 

web.xml

<filter> 
     <filter-name>HTTPS</filter-name> 
     <filter-class>com.simsarak.filters.HTTPSFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>HTTPS</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
+0

我试图修改服务器上的文件.htacess,也尝试添加了“”我的web.xml中,最后使用上的cPanel重定向,但没有一次成功 –

+0

我已经安装SSL和使用https://访问站点工作正常,但我想重定向http https –

+0

也尝试过,但最终服务器支持团队告诉我必须以编程方式完成 –

修改过滤器如下。您无需将StatusLocation header设置为response.sendRedirect()应该照顾它。

public class HTTPSFilter implements Filter { 

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

     HttpServletRequest req = (HttpServletRequest) request; 
     HttpServletResponse res = (HttpServletResponse) response; 

     String uri = req.getRequestURI(); 
     String getProtocol = req.getScheme(); 
     String getDomain = req.getServerName(); 
     String getPort = Integer.toString(req.getServerPort()); 

     if (getProtocol.toLowerCase().equals("http")) { 
      // New location to be redirected 
      String httpsPath = "https" + "://" + getDomain + uri; 
      //redirect 
      res.sendRedirect(httpsPath); 
     } else { 
      chain.doFilter(req, res); 
     } 
    } 

    @Override 
    public void init(FilterConfig arg0) throws ServletException { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void destroy() { 
     // TODO Auto-generated method stub 

    } 

}