获取CAS自定义用户信息时,中文乱码解决方法

  1. 最开始我们没有设置编码之前,cas发送http请求到cas server验证ticket票据,验证通过后,会以xml形式返回自定义的用户信息,如果存在中文就会出现乱码问题,
  2. 网上查了些资料,说在web.xml中配置spring的编码转换过滤器,那纯属扯淡,没有作用,于是我查看了源码,发现cas验证ticket是通过代码发送的http请求
  3. 好,知道了问题所在,我们开始想办法怎么解决,首先我们在spring配置中查看,验证票据的类是Cas20ServiceTicketValidator,而它继承了AbstractCasProtocolUrlBasedTicketValidator,我们再看看这个父类干了什么,哦呦,我们发现有个方法retrieveResponseFromServer(URL validationUrl, String ticket),有两个参数,一个验证票据的url,一个是票据字符串,猜一猜就这个方法是做什么用的了,于是我们看了下方法的实现,发现最终调用了CommonUtils的getResponseFromServer方法,我们进去瞅一眼,发现了一个很重要的参数encoding,这个参数默认是空的,如果为空则不做编码转换,如果不为空则按照指定编码转换字节流。所以说我们配置这个编码,问题应该就能解决

  4. 既然问题找到,我们就开始看怎么配置,继续找这个encodig在哪里,我们回到AbstractCasProtocolUrlBasedTicketValidator这个类的retrieveResponseFromServer方法,看到方法实现有一句,this.getEncoding(),我们跟踪下去发现这个属性在AbstractUrlBasedTicketValidator父类中,最后找到这个属性类,再看看Cas20ServiceTicketValidator 继承 AbstractCasProtocolUrlBasedTicketValidator,AbstractCasProtocolUrlBasedTicketValidator继承AbstractUrlBasedTicketValidator,也就是Cas20ServiceTicketValidator类可以直接配置这个encoding为UTF-8

  5. 保证cas server中casServiceValidationSuccess.jsp文件编码为utf-8,测试发现问题解决了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值