You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java的StringBuilder可靠屏蔽URL中的密码参数

用StringBuilder实现URL中密码内容的屏蔽

需要在日志展示URL时,将URL里&password=之后的密码内容替换为######,密码值不固定,要求使用StringBuilder完成该功能。

示例:

输入:https://hlg-gateway.odsus.com.br/token?grant_type=password&username=cards-app&password=cards-app;
预期输出:https://hlg-gateway.odsus.com.br/token?grant_type=password&username=cards-app&password=######;

代码实现

public static String maskPasswordInUrl(String originalUrl) {
    StringBuilder urlBuilder = new StringBuilder(originalUrl);
    String passwordPrefix = "&password=";
    int startIndex = urlBuilder.indexOf(passwordPrefix);
    
    if (startIndex == -1) {
        return urlBuilder.toString();
    }
    
    int passwordStart = startIndex + passwordPrefix.length();
    int passwordEnd = urlBuilder.indexOf("&", passwordStart);
    
    // 处理密码在URL末尾的情况,兼容分号结尾场景
    if (passwordEnd == -1) {
        passwordEnd = urlBuilder.length();
        if (passwordEnd > 0 && urlBuilder.charAt(passwordEnd - 1) == ';') {
            passwordEnd--;
        }
    }
    
    urlBuilder.replace(passwordStart, passwordEnd, "######");
    return urlBuilder.toString();
}

// 测试用例
public static void main(String[] args) {
    String input = "https://hlg-gateway.odsus.com.br/token?grant_type=password&username=cards-app&password=cards-app;";
    System.out.println(maskPasswordInUrl(input));
}

逻辑说明

  • 用StringBuilder包裹原URL,利用其高效的字符替换能力避免字符串拼接带来的性能损耗
  • 定位&password=的起始位置,未找到该参数则直接返回原URL
  • 确定密码内容的起止范围:从&password=结束后开始,到下一个&(后续参数分隔符)或者URL末尾(兼容示例中的分号结尾场景)
  • 通过replace方法精准替换密码内容为######

内容的提问来源于stack exchange,提问作者Luiz Ricardo Cardoso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:27:08