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