大黄瓜de冬天 2021-04-13 19:46 采纳率: 89.5%
浏览 152
已采纳

java.lang.IllegalStateException: 不允许修改锁定的参数映射

看了挺多文章,貌似都不是我的答案。

第三方平台访问项目接口,项目用tomcat8发布到云服务器上,用postman本地测试云服务器没有问题

开始,以为是跨域问题,尝试加@CrossOrigin注解,然而问题依旧。

 

  • 写回答

1条回答 默认 最新

  • 大黄瓜de冬天 2021-04-14 13:53
    关注

    此问题已解决,问题的解决主要还是重现了此错误,并debug到问题所在。在本地运行时没有问题的,没有往代码错误这个事情上去想,另外查看日志也因为错误的行数导致错误真正的错误行数。

    废话真多,哈哈,自己以后要注意。

    为了重现这个错误,首先跟第三方要了请求代码的文件,去掉所有拦截器的注解,在本地运行了一次,重现了问题并解决。那么为什么本地运行没有问题,到服务器就有问题了呢?那是因为用HttpServletRequest请求的getParameterMap方法在跨域(本地运行时没有跨域的)访问的时候,通过源码可知会对HashMap多了一个锁定的属性,这是tomcat以及很多工具为了遵守游览器的同源策略,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

    那么知道了问题所在,解决起来就很简单了。

    根据网上文章找到以下解决方式。

    第一种跨域注解@CrossOrigin或者写拦截器。具体本文就不介绍了,因为没有解决我的问题。

    第二种重写getParameterMap方法,这个也感觉本来如果重写了,等于放弃了同源策略,是不是很容易受到攻击,所以没有尝试。

    第三种反射到锁定属性,并改值,接触锁定。也没尝试

    第四种在获取getParameterMap方法的结果后,不要直接去put(我就是为了好看,有个地方put了)或者非要put,自己定义一个map接收getParameterMap方法的值,作下转换,自然put的锁定就不存在了。

    以上就是我遇到问题后整体解决方案。(过程更复杂一点,为自己的无知感到愧疚)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 华为ensp只要2-9实验运行结果
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。
  • ¥15 已知隐函数其中一个变量τ的具体值,求另一个变量
  • ¥15 r语言Hurst指数
  • ¥15 Acrn IVSHMEM doorbell问题
  • ¥15 yolov5中的val测试集训练时数量变小问题
  • ¥15 MPLS/VPN实验中MPLS的配置问题
  • ¥15 materialstudio氢键计算问题