将含有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)的更多相关文章

  1. 项目打包 weblogic部署

    工作流打包:   由于没有集成单点,配置文件要修改 将webnocas.xml内容复制覆盖 web.xml   到这里修改完毕 选择weblogic项目,右键maven install,生成.ear文 ...

  2. 使用Linux脚本更新Weblogic部署的应用程序

    在利用Jenkins实现Weblogic应用自动部署的功能时,如何通过Shell 脚本自动更新Weblogic部署的应用程序呢? 可以使用weblogic.jar包中的weblogic.Deploye ...

  3. 关于weblogic部署Java项目的包冲突问题

    我们可能会用各种应用服务部署我们的Java应用,比如Tomcat.WAS.weblogic等.Tomcat和WAS可能会比较少遇到一些奇怪的问题,但是用weblogic部署项目则经常遇到一些比如包冲突 ...

  4. 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 ...

  5. 性能测试——记weblogic 连接池满无法链接故障诊断过程

    记weblogic 连接池满无法链接故障诊断过程 前段时间公司负责建行的一个票据系统在,上线前几个分行试运行环境下,每天后台日志都会报oracle.jdbc.xa.OracleXAException, ...

  6. 记网站部署中一个奇葩BUG

    网页中引用的文件名不要带 adv 等 近日在写好一个网页后就把他部署到apache上测试,结果用chrome访问时有个背景图片总显示不出来,但是用firefox等却一切正常, 关键是我用windows ...

  7. IDEA+weblogic部署运行项目

    前段时间再服务器上为了部署一个系统,一直存在各种问题,不过过程中倒是把weblogic的部署掌握地特别熟练,下面就一些主要步骤做个记录:1.自己用的是IDEA,所以打开项目之后需要设置src/main ...

  8. 1.tomcat部署项目的几种方式和weblogic部署方式及一点通讯

      第一种部署方式: 直接使用myeclipse 找到server服务 添加要部署的项目Add Deployment ,然后选中某个项目,首选Exploded Archive(development ...

  9. Weblogic部署web项目代码中获取项目名为null的问题

    写在前面 这个问题之前遇到一次, 时间久就忘了, 还是好记性不如烂笔头, 记一下吧.Windows下部署到Tomcat和Linux下部署到Weblogic的获取项目名写法. 关键代码 java代码 w ...

随机推荐

  1. Matlab -- Portfolio

    1.创建空 p = Portfolio; 2.需要了解 均值,方差,协方差实现 X为矩阵 均值 = mean(X): 中位数 = median(X): 方差 = var(X): 标准差 = std(X ...

  2. RePr: Improved Training of Convolutional Filters

    关键点: 1.关于filter正交 将一层中的一个$k \times k \times c$的卷积核展开为$k * k * c$的向量,表示为$f$.一层中有$J_{\ell}$个卷积核,$\bold ...

  3. dedecms织梦文章微信分享带缩略图与简介

    dedecms V5.7二次开发 php5.6 mysql5.1 问题:dedecms文章分享到微信,带缩略图与简介.如下图: 1.准备工作 PHP 5.3+ 并且 curl扩展已经开启 微信服务号一 ...

  4. Mock.js——数据模板定义

    1. 安装 npm install mockjs --save-dev //安装开发依赖 2. 数据模板定义规则 Mock.mock({...}) String: 'string|num1-num2' ...

  5. nigix反向代理

    参考: https://www.cnblogs.com/yycc/p/8185748.html

  6. linux-基础命令篇-02

    基本命令:--LS 关于显示的颜色含义: 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝色:链接文件 红色闪烁:表示链接的文件有问题 黄色:表示设备文件 灰色:表示 ...

  7. 一个狗血的mysql编码错误

    执行查询语句总是报错,某个查询语句字段编码错误. 各种修改那个表没用, 最后发现是创建schemas的时候没有加编码 应该由 CREATE SCHEMA new_schema;改为 CREATE SC ...

  8. GD库imagettftext中文乱码的问题

    linux下出现乱码,加上编码转换就可以了. $str = mb_convert_encoding($str, "html-entities", "utf-8" ...

  9. https环境搭建(本地搭建)

    1.创建自签名证书 2. 在iis中绑定https 先解析一个域名. 运行网站 示不安全,点击继续浏览即可.在实际的环境中,你拿到的是一个实际的证书,所以不会产生类似的报告安全证书有问题.

  10. redis持久化数据的机制——转发

    转载:https://www.cnblogs.com/xingzc/p/5988080.html Redis提供的持久化机制(RDB和AOF)   Redis提供的持久化机制 Redis是一种面向“k ...