【问题标题】:UrlDecoder getParameter not able to decode password containing '%'UrlDecoder getParameter 无法解码包含“%”的密码
【发布时间】:2021-08-23 22:42:48
【问题描述】:

我有一个 java servlet 应用程序,我在其中使用 URLDecoder 来解码密码的值

这是我的代码的一部分:

Map<String, String[]> paramMap = request.getParameterMap();
Set<String> keySet =  paramMap.keySet();
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext())
        {
            String key = iterator.next();
            if (!key.equals("_")){
            try {
               String value = URLDecoder.decode(request.getParameter(key),"UTF-8");
               System.out.println("Getting parameter("+ key +" = '" + value +"')");
           }
        }

如果值包含 '%',则不会被解码

我尝试使用 getQueryString() 返回包含百分比的字符串,但它没有提取特定参数的方法

String requestParamValue = URLDecoder.decode(request.getQueryString(),"UTF-8");

这会返回:

Request raw param decoded is feature=check&userid=xyz@gmail.com&password=Asp%8]a/Asp%8]a/

有什么方法可以让包含'%'的字符串使用request.getParameter(key)解码url

谢谢

【问题讨论】:

  • 应该已经被request.getParameterMap()解码了。您正在解码两次。

标签: java decode encode urldecode


【解决方案1】:

百分比符号是 URL 编码中的保留字符,因此必须自行编码。 servlet 应该失败并显示 BAD REQUEST。
为密码参数提供的字符串应该是 URL 编码的。在java中这样做:

String result = java.net.URLEncoder.encode("Asp%8]a/Asp%8]a/",java.nio.charset. StandardCharsets.UTF_8.name());
result ==> "Asp%258%5Da%2FAsp%258%5Da%2F"

【讨论】:

  • :-) 很高兴
  • 好答案,被低估的问题/答案!
猜你喜欢
  • 2010-10-28
  • 2023-03-17
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 2019-08-19
  • 1970-01-01
  • 2016-11-30
  • 2012-10-31
相关资源
最近更新 更多