tomcat部署HTTPS后,HTTP协议的请求改为HTTPS请求的方法

现在很多网站都改为HTTPS,当给tomcat部署过HTTPS后,请求的话默认是HTTP的,这时就需要强行改变请求的协议了,因为之前没弄过相关的东西,不知解决方向,所以就写下来告诉和我一样刚接触的小白吧!

下面是我找到的两种方法,都已经使用过了,真实有效。。。。

1.在web.xml中设置一个全局过滤

 
CLIENT-CERT
Client Cert Users-only Area



SSL
/*    //过滤设置所有资源


CONFIDENTIAL

这个在网上很多都可以看到,就不多说了(PS:这个重定向好像是默认302,公司要求301, 对我来说直接淘汰,

2.在代码中添加一个Filter,把不是http协议的改为https协议;

因为公司要做xxx.com转向www.xxx.com的301重定向,所以这里有两个Filter,(第一个大家可以忽略)。

因为没有自己定义的类,比较简单,我就不注释了,将就看吧。

public class WwwFilter implements Filter {

    private String originUrl;
    private String targetUrl;

    public void init(FilterConfig filterConfig) throws ServletException {
        this.originUrl =filterConfig.getInitParameter("originUrl");//来源url
        this.targetUrl =filterConfig.getInitParameter("targetUrl");//目标url

    }
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        String hostName =req.getServerName();
        if (hostName.startsWith(originUrl)) {
            HttpServletResponse response = (HttpServletResponse) resp;
            HttpServletRequest httpRequest = (HttpServletRequest) req;
            String queryString = (httpRequest.getQueryString() ==null ? "" : "?" +httpRequest.getQueryString());
            response.setStatus(301);
            String requestUrl =httpRequest.getRequestURL().toString();
            requestUrl =requestUrl.replace(originUrl, targetUrl);
            response.setHeader("Location",requestUrl + queryString);
            response.setHeader("Connection","close");
        } else {
            chain.doFilter(req,resp);
        }

    }

}

public class HttpsFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        String scheme =req.getScheme();
        URL newUrl = null;
        if (scheme.equals("https")) {
            chain.doFilter(req,resp);
        } else {
            HttpServletResponse response = (HttpServletResponse) resp;
            HttpServletRequest httpRequest = (HttpServletRequest) req;
            String queryString = (httpRequest.getQueryString() ==null ? "" : "?" +httpRequest.getQueryString());
            response.setStatus(301);
            String requestUrl =httpRequest.getRequestURL().toString();
            URL reqUrl=new URL(requestUrl+queryString);
            newUrl=new URL("https",reqUrl.getHost(),reqUrl.getPort(),reqUrl.getFile());
            response.setHeader("Location",newUrl.toString());
            response.setHeader("Connection","close");
        }
    }

    @Override
    public void destroy() {

    }
}


    WwwFilter
    com.hyj.zq.interceptor.WwwFilter
    
      originUrl
      zqjrw.com
    
    
      targetUrl
      www.zqjrw.com
    
  
  
    WwwFilter
    /*
  
  
   
      HttpsFilter
      com.hyj.zq.interceptor.HttpsFilter
  
  
    HttpsFilter
    /*
  
这样就可以让不带www和不是http的请求变为https://www.xxx.com了。

其实这两个我感觉可以合到一起,但是公司需求再变了302,我把web.xml的httpsFilter注释掉还第一种就好了,防患于未然,真的不是我懒!!!





你可能感兴趣的:(tomcat部署HTTPS后,HTTP协议的请求改为HTTPS请求的方法)