Java正则匹配域名白名单

java,正则,匹配,域名,白名单 · 浏览次数 : 205

小编点评

## 域名白名单检测几种方式 这篇文章介绍了检测域名白名单的三种方法: 1. **v方式一**:通过正则表达式匹配完整的域名 URL 的一级域名。 2. **v方式二**:通过正则表达式匹配域名字符串,并检查它是否包含目标 URL 的部分。 3. **v方式三**:通过正则表达式匹配域名字符串,并检查它是否包含目标 URL 的部分,并使用 `URLDecoder` 进行解码。 **总结:** * 使用正则表达式匹配域名 URL 的一级域名。 * 使用正则表达式匹配域名字符串,并检查它是否包含目标 URL 的部分。 * 使用 `URLDecoder` 进行解码后,使用正则表达式匹配域名字符串,并检查它是否包含目标 URL 的部分。

正文

在上一篇文章《通用正则表达式开源工具,为开源绵尽薄力 》中,我们介绍了很多正则表达式的实例,工作中大家也经常遇到新的规则需要匹配,今天就看一下检测域名白名单的几种方式。

v方式一

    /**
     * * 获取网址 URL 的一级域名
     * http://detail.tmall.com/item.htm?spm=a230r.1.10.44.1xpDSH&id=15453106243&_u=f4ve1uq1092 ->> tmall.com
     *
     * @param url
     * @return
     */
    private static Pattern p = Pattern.compile("(?<=http://|\\.)[^.]*?\\.(com|cn|net|org|biz|info|cc|tv)", Pattern.CASE_INSENSITIVE);

    public static String getDomain(String url) {
        // 获取完整的域名
        // Pattern p=Pattern.compile("[^//]*?\\.(com|cn|net|org|biz|info|cc|tv)", Pattern.CASE_INSENSITIVE);
        Matcher matcher = p.matcher(url);
        matcher.find();
        return matcher.group();
    }

v方式二

    /**
     * 检测域名
     * @param url    原始url
     * @param target 需要检测的url
     * @return
     */
    public static boolean checkDomain(String url, String target){
        String urlDecode = url;
        try {
            urlDecode = URLDecoder.decode(url);
        }catch (Exception e){

        }

        Pattern pattern = Pattern.compile("://(.*?)/", Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(urlDecode);
        matcher.find();
        String domain = matcher.group(1);
        if(!Strings.isNullOrEmpty(domain)){
            if(domain.contains(target)){
                return true;
            }
        }

        return false;
    }

v方式三

    /**
     * 检测域名
     * @param url    原始url
     * @param target 需要检测的url
     * @return
     */
    public static boolean checkDomain2(String url, String target){
        String urlDecode = url;
        try {
            urlDecode = URLDecoder.decode(url);
        }catch (Exception e){

        }

        String pattern = "https?://[^/]*" + target + "/.*";
        boolean isMatch = Pattern.matches(pattern, urlDecode);
        return isMatch;
    }

v源码地址

https://github.com/toutouge/TouTou.RegexTool


作  者:请叫我头头哥
出  处:http://www.cnblogs.com/toutou/
关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!

与Java正则匹配域名白名单相似的内容:

Java正则匹配域名白名单

在上一篇文章《通用正则表达式开源工具,为开源绵尽薄力 》中,我们介绍了很多正则表达式的实例,工作中大家也经常遇到新的规则需要匹配,今天就看一下检测域名白名单的几种方式。 v方式一 /** * * 获取网址 URL 的一级域名 * http://detail.tmall.com/item.htm?sp

Java 21 正式 GA,虚拟线程真的来了

UTC 时间 2023 年 9 月 19 日,期盼已久的 Java 21 终于发布正式版! 本文一起来看看其中最受 Java 开发者关注的一项新特性:Loom 项目的两个新特性之一的 ”虚拟线程(Virtual Thread)“(另外一个新特性是 ”结构化并发(Structured Concurre

Java 21 新特性:Record Patterns

Record Patterns 第一次发布预览是在JDK 19、随后又在JDK 20中进行了完善。现在,Java 21开始正式推出该特性优化。下面我们通过一个例子来理解这个新特性。 record Point(int x, int y) {} static void printSum(Object o

[转帖]揭密Java常用性能调优工具的底层实现原理

https://zhuanlan.zhihu.com/p/547081135 本文来自于社区专家鸠摩【《深入剖析Java虚拟机:源码剖析与实例详解》作者】的独家干货,更多文章可去专家主页:鸠摩主页 | HeapDump性能社区 正文: 当Java虚拟机出现故障和性能问题时,我们通常会借助一些业界知名

[转帖]【技术剖析】9. 使用 NMT 和 pmap 解决 JVM 资源泄漏问题

https://bbs.huaweicloud.com/forum/thread-168749-1-1.html 作者:宋尧飞 > 编者按:笔者使用 JDK 自带的内存跟踪工具 NMT 和 Linux 自带的 pmap 解决了一个非常典型的资源泄漏问题。这个资源泄漏是由于 Java 程序员不正确地使

java与es8实战之三:Java API Client有关的知识点串讲

正式使用官方的Java API Client操作ES之前,将与之有关的重要知识点先做一轮串讲,后面开始编码时,疑点已扫清,可以愉快而顺畅的实现业务功能

Java -jar 运行 报 MalformedInputException: Input length = 1

Intellij IDEA 中运行正常,linux 运行正常, cmd 下运行 报:MalformedInputException: Input length = 1 微服务项目,在Nacos中做了配置,在引用 Nacos中配置时,编码问题,导致的错误 org.yaml.snakeyaml.erro

给师妹写的《Java并发编程之线程池十八问》被表扬啦!

写在开头 之前给一个大四正在找工作的学妹发了自己总结的关于Java并发中线程池的面试题集,总共18题,将之取名为《Java并发编程之线程池十八问》,今天聊天时受了学妹的夸赞,心里很开心,毕竟自己整理的东西对别人起到了一点帮助,记录一下! Java并发编程之线程池十八问 经过之前的学习,我们知道在Ja

java多线程编程:你真的了解线程中断吗?

java.lang.Thread类有一个 interrupt 方法,该方法直接对线程调用。当被interrupt的线程正在sleep或wait时,会抛出 InterruptedException 异常。事实上, interrupt 方法只是改变目标线程的中断状态(interrupt status),...

今天我们来聊Java IO模型,BIO、NIO、AIO三种常见IO模型

一、写在开头 很久没更新喽,最近build哥一直在忙着工作,忙着写小说,都忘记学习自己的本职了,哈哈,不过现在正式回归! 我们继续学习Java的IO相关内容,之前我们了解到,所谓的IO(Input/Output)就是计算机系统与外部设备之间通信的过程。 二、IO调用过程 接下来我们从应用调用的过程中