• 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;
        }
    
    }
    随笔看心情
  • 相关阅读:
    海康威视复赛题
    [转] A*寻路算法C++简单实现
    [转]程序进行性能分析工具gprof使用入门
    [转]KMP 算法
    boolalpha的用法和作用
    python与数据科学有多少“暧昧情事”?14个Q&A告诉你
    Python来袭,教你用Neo4j构建“复联4”人物关系图谱!
    深入理解BERT Transformer ,不仅仅是注意力机制
    Python开发者年度调研,结果出乎意料!
    R和Python,对抗or融合?
  • 原文地址:https://www.cnblogs.com/stromgao/p/13408540.html
Copyright © 2020-2023  润新知