记Weblogic部署BUG(websocket)
将含有websocket的SSM项目部署在Weblogic上面,遇到websocket报错如下
java.lang.ClassCastException: org.springframework.session.web.http.SessionReposi
toryFilter$SessionRepositoryRequestWrapper$HttpSessionWrapper cannot be cast to
weblogic.servlet.security.internal.SessionSecurityData
at weblogic.servlet.security.internal.SecurityModule.getCurrentUser(Secu
rityModule.java:197)
at weblogic.websocket.tyrus.TyrusServletFilter.doFilter(TyrusServletFilt
er.java:167)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja
va:78)
at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(Abst
ractInstrumentedFilter.java:104)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja
va:78)
Truncated. see log file for complete stacktrace
直观看,是类型转换错误,发生在weblogic的对象中.
可以搜到的类似问题中,都在尝试将/websocket排除在web.xml中的filter之外,而这边遇到的项目,这么做不现实,所以开始分析该bug
思路:
1.DEBUG获取到出错的 filterChain,发现weblogic自行追加了一个fitler,叫TyrusServletFilter,错误在这个Filter中发生.
2.从weblogic的安装目录中找到TyrusServletFilter的jar包,引入到IDEA,准备反编译看源码
3.根据上面的报错,错误发生在SecurityModule中的getCurrentUser中,打断点DEBUG确定到具体行:

上图是TyrusServletFilter的反编译代码,红线处可看到,进入出错代码的条件

具体出错行,非常明了的强制转换,转换了request.getSession的结果
4.在该处进行DEBUG(居然真的能DEBUG),发现正常的时候,getCurrentUser的request参数是一个ServletRequestImpl对象(来自weblogic),而出错时,request参数是一个SecurityContextHolderAwareRequestWrapper对象,故确定问题是包装问题(即包装器的getSession并没有代理好其内部request的getSession方法)
解决方案:
确定了出错的包装类后,要重写并覆盖该类,代码如下:

该包装类原本并没有覆盖getSession方法,这里添加覆盖,加入和TyrusServletFilter中相同的判断逻辑,
如果符合条件,则就地一层一层拆包装,拆到ServletRequestImpl为止.再调用ServletRequestImpl的getSession返回出结果.
如果不符合条件,不做改变.
这大概是解决该问题的另一套思路了.
我这里由于使用了SpringSecurity,故要做修改的是SecurityContextHolderAwareRequestWrapper
如果使用了别的filter,那么可以覆盖其他的requestWrapper
当然最简单的方案还是在web.xml中将/websocket排除在所有filter外,如果不可以的话,再按我这个思路做改动
记Weblogic部署BUG(websocket)的更多相关文章
- 项目打包 weblogic部署
工作流打包: 由于没有集成单点,配置文件要修改 将webnocas.xml内容复制覆盖 web.xml 到这里修改完毕 选择weblogic项目,右键maven install,生成.ear文 ...
- 使用Linux脚本更新Weblogic部署的应用程序
在利用Jenkins实现Weblogic应用自动部署的功能时,如何通过Shell 脚本自动更新Weblogic部署的应用程序呢? 可以使用weblogic.jar包中的weblogic.Deploye ...
- 关于weblogic部署Java项目的包冲突问题
我们可能会用各种应用服务部署我们的Java应用,比如Tomcat.WAS.weblogic等.Tomcat和WAS可能会比较少遇到一些奇怪的问题,但是用weblogic部署项目则经常遇到一些比如包冲突 ...
- weblogic部署异常: cvc-enumeration-valid: string value '3.0' is not a valid enumeration value for web-app-versionType in namespace http://java.sun.com/xml/ns/javaee:<null>
尝试使用weblogic部署一个Demo应用,在选择应用目录后,报出下面的异常: VALIDATION PROBLEMS WERE FOUND problem: cvc-enumeration-val ...
- 性能测试——记weblogic 连接池满无法链接故障诊断过程
记weblogic 连接池满无法链接故障诊断过程 前段时间公司负责建行的一个票据系统在,上线前几个分行试运行环境下,每天后台日志都会报oracle.jdbc.xa.OracleXAException, ...
- 记网站部署中一个奇葩BUG
网页中引用的文件名不要带 adv 等 近日在写好一个网页后就把他部署到apache上测试,结果用chrome访问时有个背景图片总显示不出来,但是用firefox等却一切正常, 关键是我用windows ...
- IDEA+weblogic部署运行项目
前段时间再服务器上为了部署一个系统,一直存在各种问题,不过过程中倒是把weblogic的部署掌握地特别熟练,下面就一些主要步骤做个记录:1.自己用的是IDEA,所以打开项目之后需要设置src/main ...
- 1.tomcat部署项目的几种方式和weblogic部署方式及一点通讯
第一种部署方式: 直接使用myeclipse 找到server服务 添加要部署的项目Add Deployment ,然后选中某个项目,首选Exploded Archive(development ...
- Weblogic部署web项目代码中获取项目名为null的问题
写在前面 这个问题之前遇到一次, 时间久就忘了, 还是好记性不如烂笔头, 记一下吧.Windows下部署到Tomcat和Linux下部署到Weblogic的获取项目名写法. 关键代码 java代码 w ...
随机推荐
- 添加本地nuget包
1.找到vs工具栏,如下图所示,找到包管理器 2.点击添加按钮,添加源,点击下方浏览按钮,找到源得位置,然后点击更新 3.找到项目,切换包源,切换到包管理器得浏览页面,找到要添加得包安装即可.
- jQueryEasyUI应用 – datagrid之CRUD应用
本文 jQueryEasyUI + SpringBoot + Mybatis整合Datagrid的CRUD应用 一.前言准备 1.我们将使用下面的插件: datagrid:向用户展示列表数据. dia ...
- windows+Apache+mod_wsgi+flask部署笔记
windows是用的2008 server 64位. 照着网上教程即可:https://www.jianshu.com/p/0aa1c7097976 但是有个问题: Apache2.4怎么配置???跟 ...
- Linux必备150个命令
命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂 ...
- 通过编写一个简单的日志类库来加深了解C#的文件访问控制
在程序的开发调试过程及发布运行后的状态监控中,日志都有着极其重要的分量,通过在关键逻辑节点将关键数据记录到日志文件当中能帮助我们尽快找到程序问题所在.网上有不少专业成熟的日志组件可用,比如log4ne ...
- python,pip环境变量设置
安装好python后,配置环境变量. 安装pygame需要先配置两个环境变量. 第一个是python的.先打开计算机,然后点击‘系统属性’然后点击‘高级系统设置’然后点击‘环境变量’在系统变量中找到p ...
- 常用adb 指令
adb指令 monkey https://www.cnblogs.com/aland-1415/p/6949964.html
- pip更新
python -m ** install -U **
- MySQL union all排序问题
mysql中多个查询结果排序后union之后是混乱的,可以在各个查询结果最后加limit 999999999再union,参考https://blog.csdn.net/chenyao1994/art ...
- springboot webmvc初始化:一个登陆异常引出的话题
1.场景复现: 一个登陆异常引出的问题. 我们通过精心组织组件扫描的方式,来装配不同的子模块,形成一个可运行的应用: 在载入某个子模块后,我们发现应用虽然正常启动,但尝试登陆的时候,出现一个很异常的异 ...