http 切换成 https

public class HttpsUtil {

    private static final String HTTPS = "https://";

    private static final String HTTP = "http://";

    /**
     * https 切换 (不包含scheme,http://)
     * @param request
     * @param url
     * @return
     */
    public static String httpsSwitch(HttpServletRequest request, String url, String httpsSwitch, String appServer){
        if(StringUtils.isBlank(url)){
            return url;
        }
        if ("0".equals(httpsSwitch)) {
            return url;
        }
        String newUrl = "";
        String host = request.getHeader("host");
        if (StringUtils.isBlank(host)) {
            host = appServer.replace("http://","");
        }
        host = host.replace(":80", "");
        newUrl = HTTPS + host + request.getContextPath() + url;
        return newUrl;
    }

    /**
     * https 切换(包含scheme,http://),url含有端口不替换
     * @param url
     * @return
     */
    public static String httpsSwitch(String url, String httpsSwitch){
        if(StringUtils.isBlank(url)){
            return url;
        }
        if ("0".equals(httpsSwitch)) {
            return url;
        }
        String newUrl = "";
        List<String> newUrlList = new ArrayList<>();
        if (url.contains("http://")) {
            replaceHttp(url, newUrl, newUrlList);
            if (!CollectionUtils.isEmpty(newUrlList)) {
                newUrl = newUrlList.get(0);
            }
        } else {
            newUrl = url;
        }
        return newUrl;
    }

    /**
     * 替换http
     * @param url
     * @param newUrl
     * @param newUrlList
     * @return
     */
    private static void replaceHttp(String url, String newUrl, List<String> newUrlList) {
        String scheme = "";
        String context = "";
        String[] array = url.split("://", 2);
        if (array.length > 0) {
            scheme = array[0];
            context = array[1];
        }

        // 是否含有端口号
        boolean containsPort = containsPort(context);
        // 不含端口号才替换
        if (!containsPort) {
            scheme = scheme.replaceFirst("http", HTTPS);
        } else {
            scheme = HTTP;
        }
        newUrl = newUrl + scheme;
        // 后面url是否含有://
        boolean contains = context.contains("://");
        if (contains) {
            replaceHttp(context, newUrl, newUrlList);
        } else {
            newUrl = newUrl + context;
            newUrlList.add(newUrl);
        }
    }

    /**
     * 是否含有端口号
     * @param url
     * @return
     */
    private static boolean containsPort(String url) {
        if (StringUtils.isNotBlank(url)) {
            int firstIndex = url.indexOf("/");
            if (firstIndex != -1) {
                String remoteAddr = url.substring(0, firstIndex);
                if (remoteAddr.contains(":")) {
                    return true;
                }
            } else {
                if (url.contains(":")) {
                    return true;
                }
            }
        }
        return false;
    }

}

 

posted @ 2020-07-31 11:07  二次元的程序猿  阅读(651)  评论(0编辑  收藏  举报