讨论区 » AAS-V10企业版 » AAS-V10企业版补丁插件专区 »
部署应用后,浏览器开发者模式 出现 ERR_CONTENT_LENGTH_MISMATCH 获取资源异常
版本:20221116
异常信息:出现 ERR_CONTENT_LENGTH_MISMATCH,后台无明显异常日志
问题分析:
首先确定应用是否使用了nginx,有的话可能是nginx导致的,可参考链接:https://www.pudn.com/news/63186d164d92104ef1b6a4ef.html
经过研发同事分析:应用程序在获取class目录时出现问题,应用方编写代码时,调用的方法getProtectionDomain()是参考tomcat定义的,
而aas中间件参考的是glassfish的getProtectionDomain()方法,二者在获取class路径时 的值不一样
--------------------------------------------------------------------------------------------------------------------------------------------
在获取class文件目录 的时候
客户代码:
String classPath = SpringbootApplication.class.getProtectionDomain().getCodeSource().getLocation().getPath();
按正常的逻辑获取到的是
SpringbootApplication.class的类文件的根目录 如:D:\ApusicAS\aas\domains\mydomain\applications\ROOT\WEB-INF\classes\cn\restcloud\springboot\SpringbootApplication.class
应该获取返回的是(tomcat返回的,返回的是类目录)
D:\ApusicAS\aas\domains\mydomain\applications\ROOT\WEB-INF\classes
但aas返回的是(参考glassfish返回的,返回的是class文件)
D:\ApusicAS\aas\domains\mydomain\applications\ROOT\WEB-INF\classes\cn\restcloud\springboot\SpringbootApplication.class
--------------------------------------------------------------------------------------------------------------------------------------------
总结:主要是我们对getProtectionDomain()这个方法的定义是和glassfish一样的,和tomcat调用有点不一致,导致获取的路径不一致
处理方案:
1.将ApusicAS\aas\modules下的aas-war-util.jar先备份一下
2.将附件中补丁所有相关的WebappClassLoader类 替换到aas-war-util.jar的相关类
3.重启中间件,并且重新部署应用