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

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的锁定就不存在了。

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

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

报告相同问题?

悬赏问题

  • ¥15 FutureWarning:不推荐使用空或全 NA 条目的 DataFrame 串联行为。怎么改呢?
  • ¥15 Chatgpt突然无法正常显示数学公式,如何解决?
  • ¥15 一个用华为模拟器做的实验。
  • ¥28 opencv Cuda C++编译
  • ¥15 插入sim卡4g模组反复断连
  • ¥100 如何把 16bit Bayer 图像数据转换为 TIFF RGB
  • ¥15 进行基于用户的协同过滤推荐,使用准确率和召回率评价推荐模型的效果
  • ¥15 word脚注设置不起空格符号
  • ¥15 为什么apriori的运行时间会比fp growth的运行时间短呢
  • ¥15 求解密json或者美化