tomcat如何处理post请求base64格式入参

1.几个问题

 1) post请求参数是否编码

2) post请求参数为json, 是否编码

        最近项目中遇到一个问题,某个业务的接口需要传一个签名参数,但是签名中包含一些特殊字符,debug发现

服务端接受到的参数会将某些特殊字符过滤掉,比如/ .

环境信息:

1) 服务器: tomcat8

2)请求接口协议: http

3) http请求方式: post

4) 参数格式: content-type为application/x-www-form-urlencoded

5) 签名参数: base64编码,包含/ ,+ ,=三个特殊字符 

2. tomcat处理请求参数源码

上图表面只处理form-data和x-www-form-urlencoded 两种方式的POST请求参数,json格式默认直接以二进制流的形式处理,不会参与URL编码

parameters.processParameters(formData, 0, len);
switch(bytes[pos]) {
                    case '=':
                        if (parsingName) {
                            // Name finished. Value starts from next character
                            nameEnd = pos;
                            parsingName = false;
                            valueStart = ++pos;
                        } else {
                            // Equals character in value
                            pos++;
                        }
                        break;
                    case '&':
                        if (parsingName) {
                            // Name finished. No value.
                            nameEnd = pos;
                        } else {
                            // Value finished
                            valueEnd  = pos;
                        }
                        parameterComplete = true;
                        pos++;
                        break;
                    case '%':
                    case '+':
                        // Decoding required
                        if (parsingName) {
                            decodeName = true;
                        } else {
                            decodeValue = true;
                        }
                        pos ++;
                        break;
                    default:
                        pos ++;
                        break;
                }
            } while (!parameterComplete && pos < end);

 上面源码是处理类似name=xx&id=xx格式的参数

其中关键点: decodeName 代表参数名是否编码,即是否含有特殊字符或中文等

decodeValue代表参数值是否编码,即是否含有特殊字符或中文等

 

举例说明: 如果name=中文

那么接受参数的时候decodeValue会被urlencode编码,也就是中文对应的Unicode的Utf-8格式编码,然后前面加上%

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值