判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过

判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过如果含有 + %符号无法判断,否则判断不准或报错 Exception in thread "main" java.lang.IllegalAr

判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过

判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过 如果含有 + %符号无法判断, 否则判断不准或报错 Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "#&"

代码语言:javascript代码运行次数:0运行复制
package com.example.core.mydemo.java;

import java.io.UnsupportedEncodingException;
import java.URLDecoder;
import java.URLEncoder;

/**
 * url1=%3D%3D
 * decodedUrl===
 * URL 1 is encoded: true
 * decodedUrl===
 * URL 2 is encoded: false
 * url1=%2B+%2F%3F%25%23%26
 * decodedUrl=+ /?%#&
 * URL 3 is encoded: true
 * decodedUrl= /?#&
 * URL 4 is encoded: false
 * decodedUrl=
 * URL 5 is encoded: true
 * URL 6 is encoded: true
 * java.lang.IllegalArgumentException: URLDecoder: Incomplete trailing escape (%) pattern
 *     at java.URLDecoder.decode(URLDecoder.java:187)
 *     at com.example.core.mydemo.java.URLUtils.isUrlEncoded(URLUtils.java:22)
 *     at com.example.core.mydemo.java.URLUtils.main(URLUtils.java:56)
 * */
public class URLUtils {
    public static boolean isUrlEncoded(String url) {
        try {
            String decodedUrl = URLDecoder.decode(url, "UTF-8");
            System.out.println("decodedUrl=" + decodedUrl);
            return !decodedUrl.equals(url);
        } catch (UnsupportedEncodingException e) {
            // 处理异常
            e.printStackTrace();
            return false;
        }catch (IllegalArgumentException ex){
            ex.printStackTrace();
            return true;
        }
    }


    public static void main(String[] args) throws UnsupportedEncodingException {
        String url1  = URLEncoder.encode("==","UTF-8");
        System.out.println("url1=" + url1);
        String url2  = "==";

        System.out.println("URL 1 is encoded: " + isUrlEncoded(url1));
        System.out.println("URL 2 is encoded: " + isUrlEncoded(url2));


        url1  = URLEncoder.encode("+ /?%#&","UTF-8");
        System.out.println("url1=" + url1);
        url2  = " /?#&";  //去掉 + %  否则判断不准或报错 Exception in thread "main" java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "#&"


        System.out.println("URL 3 is encoded: " + isUrlEncoded(url1));
        System.out.println("URL 4 is encoded: " + isUrlEncoded(url2));

        url1  = "+";
        url2  = "%";
        System.out.println("URL 5 is encoded: " + isUrlEncoded(url1));
        System.out.println("URL 6 is encoded: " + isUrlEncoded(url2));

    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-06-15,如有侵权请联系 cloudcommunity@tencent 删除javasignsystemurl编码

发布者:admin,转转请注明出处:http://www.yc00.com/web/1754970158a5223004.html

相关推荐

  • 判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过

    判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过如果含有 + %符号无法判断,否则判断不准或报错 Exception in thread "main" java.lang.IllegalAr

    1月前
    180

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信