Files
notes/work/移动杭研/业务梳理/信安信息/信安备案号查询逻辑.md
T
2026-03-01 01:43:46 +08:00

34 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
域名备案号查询时,如果对一个完整的域名(例如:`cdn.jiangsu.chinatax.gov.cn`)无法直接获取备案信息,会将其拆分为子域名列表进行逐级查询。例如:
- 原始域名:`cdn.jiangsu.chinatax.gov.cn`
- 切割后的子域名列表:`["jiangsu.chinatax.gov.cn", "chinatax.gov.cn"]`
通过对这些子域名一次性全部查询备案信息,得到一个备案信息映射:
```
{
"chinatax.gov.cn": "true_京ICP备13021685号-2",
"jiangsu.chinatax.gov.cn": "true_苏ICP备05002258号-2"
}
```
最后为原始域名(`cdn.jiangsu.chinatax.gov.cn`)确定一个最终的备案号。
逻辑是遍历子域名列表,根据子域名在备案信息映射中是否存在,选取对应的备案号。代码逻辑如下:
```java
subDomainMap.forEach((key, subs) -> subs.forEach(sub -> {
if (domainsICP.containsKey(sub)) {
result.put(key, domainsICP.get(sub));
}
}));
```
这里 `subDomainMap` 存储的是原始域名和其对应的子域名列表的映射,例如 `{ "cdn.jiangsu.chinatax.gov.cn": ["jiangsu.chinatax.gov.cn", "chinatax.gov.cn"] }``domainsICP` 是备案信息映射,`result` 用于存储最终的备案号结果。
代码逻辑中,子域名列表 `["jiangsu.chinatax.gov.cn", "chinatax.gov.cn"]` 是按照从长到短的顺序遍历的。由于 `result.put(key, value)` 会覆盖之前的值,最终结果总是会被列表中最后一个匹配到的子域名的备案号覆盖。
- 第一次循环,`sub``jiangsu.chinatax.gov.cn`,找到备案号 `true_苏ICP备05002258号-2`,存储到 `result` 中。
- 第二次循环,`sub``chinatax.gov.cn`,也找到备案号 `true_京ICP备13021685号-2`,会覆盖掉之前的值。
- 同理如果 `chinatax.gov.cn``false` 那么最终 `cdn.jiangsu.chinatax.gov.cn` 也会被覆盖为未备案(false)。