项目场景:系统:Centos7.3,CAS:3.2.1

生产环境window有一套应用,使用单点登录(shiro+cas),最近把应用迁移到Linux,寻思这还不简单,配置jdk,tomcat一扔,启动,随便试了个账号登录没问题,大功告成


问题描述:个别用户登录报错

第二天客户B反馈账号无法登录,寻思不应该啊(又用A账号登录下没问题)好吧,看日志吧,扫了眼错误信息如下:


原因分析:编码问题

既然是编码问题,第一反应就是修改tomcat字符集,server.xml、catalina.sh等常规文件修改一遍后重启还是报错

打印日志

首先找到报错的xmlUtils文件(反编译或者gitHub下载源码都可以)增加打印日志,看看xml数据具体是什么内容


解决方案:一劳永逸

临时方案

既然修改tomcat编码不起作用,那就把Linux服务器的改为gbk,然后重启tomcat后,虽然可以正常登录,但是正常的业务日志全部都是乱码。

最终方案

网上搜索后发现有人遇到类似情况参考,没有采用这种方式,我是直接改Cas20ServiceTicketValidator这个类,代码如下:

public class Cas20ServiceTicketValidator extends AbstractCasProtocolUrlBasedTicketValidator {public Cas20ServiceTicketValidator(final String casServerUrlPrefix) {super(casServerUrlPrefix);String os = System.getProperty("os.name").toLowerCase();log.info("os:" + os);if (os.indexOf("windows") < 0) {super.setEncoding("gbk");log.info("not windows set encoding to gbk");}this.proxyRetriever = new Cas20ProxyRetriever(casServerUrlPrefix, getEncoding());}

 总结

  1. cas默认一般是gbk,然后我们知道window默认也是gbk,所以在window上是没问题的
  2. Cas20ProxyReceivingTicketValidationFilter.java中,getTicketValidator方法里设置的默认编码方式是null。根据测试当默认编码方式是null时只能识别到GBK模式或者gb2312的编码,所以才会造成登录报错。

参考1:Shiro集成Cas客户端中文乱码问题_书生也疯狂-CSDN博客

参考2:cas中文乱码问题完美解决_书剑零落的博客-CSDN博客

CAS中文乱码,登录报错相关推荐

  1. oracle加as报错,【Oracle】-【sqlplus / as sysdba登录报错问题】-新用

    [Oracle]-[sqlplus / as sysdba登录报错问题]-新用户使用sqlplus / as sysdba登录报错解决 [Oracle]-[sqlplus / as sysdba登录报 ...

  2. QQ第三方登录报错error=-1

    qq 第三方登录报错error=-1 再次实例化qc类.

  3. phpmyadmin登录报错crypt_random_string requires at least one symmetric cipher be loaded 解决方法

    phpmyadmin登录报错crypt_random_string requires at least one symmetric cipher be loaded 解决方法 参考文章: (1)php ...

  4. mysql登录报错error1045,mysql创建登录报错ERROR1045(28000)

    .如下图(第四个): 而本人创建的用户为: Mysql> grant  all  on  itcase.*  to  'test'@'%'  identified  by  '123456'; ...

  5. Neo4j登录报错Neo4j Server shutdown initiated by request解决

    Neo4j登录报错Neo4j Server shutdown initiated by request解决 cmd运行neo4j.bat console,出现一大串错误,如图 丧心病狂,一通百度谷歌b ...

  6. Onenote无法登录报错显示0xE000078D解决方法

    Onenote登录报错显示0xE000078D三种解决办法 今天登陆OneNote的时候突然报错显示0xE000078D,现在找到了解决方法: 修改DNS:将自动改为手动 关闭代理: 成功 关闭防火墙 ...

  7. 企业微信登录报错:应用程序无法正常启动(0xc0000142);Win10应用程序无法正常启动0xc0000142错误的解决方法

    企业微信登录报错,有时候要点击多次才能登陆. 解决办法:创建一个文本,把下面一段复制进去,文本后缀改成.bat,启动运行一下即可. sc stop NSFFileCtl sc config NSFFi ...

  8. CentOS7安装harbor仓库+修改默认用户+仓库登录报错

    Docker安装和简单的使用_hrj的博客-CSDN博客 下面 搭建harbor仓库 1.安装docker-compose Linux 上我们可以从 Github 上下载它的二进制包来使用,最新发行的 ...

  9. SSH远程登录报错 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

    SSH远程登录报错 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 1. 错误描述 2. 错误分析 3. 解决方案 1. 错误描述 之前ss ...

最新文章

  1. 强烈推荐:240多个jQuery插件
  2. mysql使用sha256密码,MySQL5.6启用sha256_password插件
  3. 图的遍历:BFS和DFS
  4. C语言入门题-求阶乘序列前N项和
  5. Anaconda 下libsvm的安装
  6. SAP Spartacus ProductConnector和ProductService实现
  7. POJ - 1321 棋盘问题
  8. matlab导入txt生成曲面,求助:怎样将txt的数据导入到Matlab中并根据参数画出波形...
  9. Notepad++ 快捷键 大全
  10. Binary XML file line #2: You must supply a layout_height attribute inflate
  11. CUDA 网格级并发-流(2)
  12. 如何获取k8s拓扑_k8s从安装到精通--Service 拓扑介绍
  13. apollo 部署 使用
  14. V.Replication and Sharding(创建主从数据库)
  15. SQL Server 时间、日期函数
  16. MYSQL索引3:聚簇索引和非聚簇索引
  17. excel多表数据自动关联
  18. 【雅思】【绿宝书错词本】List13~24
  19. 数理统计复习:统计量及其分布(3)充分统计量
  20. GPT-4 终问世!旧王已死,新王当立!面对AI,人类真的准备好了吗?

热门文章

  1. JavaScript百度地图离线版
  2. UI教程 - 绘图之UIBezierPath1.2:反转路径、虚线
  3. mysql不是内部命令_MySQL安装出现“不是内部或外部命令,也不是可执行程序”等一系列问题的解决方案...
  4. Kendo-UI学习 数据表格grid属性说明(一)
  5. 项目实践(一)点餐系统——数据管理模块基础操作
  6. 计算机的桌面窗户是什么,怎么设置电脑桌面便签小窗口,电脑桌面归纳事情的小窗口...
  7. Itools的简单使用
  8. 安卓上的Termux可以用ping6这个指令测试ipv6
  9. SAP中内部订单清单功能
  10. MATRIXX与Telstra再签协议,帮助其完善5G计费策略并提升下一代商务能力