使用过滤器不工作将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>
答
修改过滤器如下。您无需将Status
和Location 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
}
}
我试图修改服务器上的文件.htacess,也尝试添加了“”我的web.xml中,最后使用上的cPanel重定向,但没有一次成功 –
我已经安装SSL和使用https://访问站点工作正常,但我想重定向http https –
也尝试过,但最终服务器支持团队告诉我必须以编程方式完成 –