解决Request.getParameter获取不到特殊字符bug问题

 更新时间:2023年07月29日 17:06:58   作者:丿ZhangT  
这篇文章主要介绍了解决Request.getParameter获取不到特殊字符bug问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Request.getParameter获取不到特殊字符bug

今天系统之间联调,发现对端平台发过来的json串,到我们系统获取不到,经过排查是因为对端系统发起的json串中有"#"这类特殊字符,我们用request.getparamter获取不到。

解决办法

如果是前端发送的要用encodeURI编码,编码之后我们用request.getparamter就可以获取到了,然后后端用URLDecoder.decode(加密串) 解密。

如果是后端发送URLEncoder.encode(要加密的串)加密。

使用URLDecoder.decode(加密串) 解密还有个好处就是如果是明文,那么解密出来还是明文,如果是密文,也可以正常解密。

如下案例:

        String s = "abc#def";
        b = URLDecoder.decode(s);
        System.out.println("直接解密后数据" + b);
        b = URLEncoder.encode(s);
        System.out.println("编码后数据"+" "+b);
        b = URLDecoder.decode(b);
        System.out.println("解码后数据" + b); 

结果:

image.png

request.getParameter过滤特殊字符,导致后台AES解密时报错

Input length must be multiple of 16 when decryp

碰到一个问题,前端用crypto.js加密,后台进行对应的解密,结果有时候会报错,Input length must be multiple of 16 when decryp。

看过网上一些其他的说法,说是需要进行编解码,这个在我的项目里面是有进行过的,所以排除这个问题。

于是继续跟踪,发现是参数不对,前端加密后的参数是这样的(有两个+号):

项目用的是springsecurity做登陆控制,于是研究并跟踪其源码过程,

这个方法获取到的密码是这样的(+号已经没了,变成了空格):

对比发现其中的两个+号不见了,变成了空格,这才是根本原因,所以后台解密肯定不对,于是继续跟踪这个方法,

终于发现了大问题,是这个request.getParameter这个方法在搞鬼,这个方法会自动过滤特殊字符,而加密后的密码里包含+号,自动变成了空格,所以导致不对了。

于是去百度request.getParameter()方法过滤特殊字符的问题以及研究了一下源码,找到了一堆方法,最多的解决方法就是对参数进行url转义,可以使用param = encodeURIComponent(param),之后再进行请求,问题解决。

以前还真没碰到过,算是涨知识了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MyBatis-Plus结合Layui实现分页方法

    MyBatis-Plus结合Layui实现分页方法

    MyBatis-Plus 使用简单,本文主要介绍使用 service 中的 page 方法结合 Layui 前端框架实现分页效果,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • Java wait和notifyAll实现简单的阻塞队列

    Java wait和notifyAll实现简单的阻塞队列

    这篇文章主要介绍了Java wait和notifyAll实现简单的阻塞队列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • IDEA配置Tomcat后,控制台tomcat catalina log出现乱码问题

    IDEA配置Tomcat后,控制台tomcat catalina log出现乱码问题

    本文介绍了如何通过设置Tomcat和IDEA的编码格式来解决编码问题,首先尝试修改Tomcat的logging.properties文件中的编码设置,如果未解决问题,则调整IDEA的编码设置,通过修改vmoptions文件来全局设置IDEA的编码格式,作者分享了个人成功解决问题的方法和步骤,供其他开发者参考
    2024-09-09
  • Java ClassCastException异常解决方案

    Java ClassCastException异常解决方案

    这篇文章主要介绍了Java ClassCastException异常解决方案,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • java反射获取一个object属性值代码解析

    java反射获取一个object属性值代码解析

    这篇文章主要介绍了java反射获取一个object属性值代码解析,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • Spring Security实现基于RBAC的权限表达式动态访问控制的操作方法

    Spring Security实现基于RBAC的权限表达式动态访问控制的操作方法

    这篇文章主要介绍了Spring Security实现基于RBAC的权限表达式动态访问控制,资源权限表达式动态权限控制在Spring Security也是可以实现的,首先开启方法级别的注解安全控制,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Java使用集合实现斗地主分牌完整代码

    Java使用集合实现斗地主分牌完整代码

    在斗地主游戏中,通常是将一副牌平均分成3份,每份17张牌,并留3张底牌,我们可以使用集合来实现这一功能,这篇文章主要给大家介绍了关于Java使用集合实现斗地主分牌的相关资料,需要的朋友可以参考下
    2024-05-05
  • java集合类arraylist循环中删除特定元素的方法

    java集合类arraylist循环中删除特定元素的方法

    下面小编就为大家带来一篇Java集合类ArrayList循环中删除特定元素的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • 一文解析Java中的方法重写

    一文解析Java中的方法重写

    子类继承父类后,可以在子类中书写一个与父类同名同参的方法,从而实现对父类中同名同参数的方法的覆盖,我们把这一过程叫做方法的重写。本文将分析一下Java中的方法重写,感兴趣的可以了解一下
    2022-07-07
  • Mybatis使用useGeneratedKeys获取自增主键

    Mybatis使用useGeneratedKeys获取自增主键

    这篇文章主要为大家介绍了Mybatis使用useGeneratedKeys获取自增主键示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01

最新评论