zoukankan      html  css  js  c++  java
  • 关于cas server无法通过session持久化方式实现集群的问题

    最近在搭建cas单点登录系统 ,在建立集群时发生一个问题。

    搭建的环境是tomcat+tomcat-redis-session-manager+redis+cas

    在对tomcat的session进行持久化时,cas系统的登录流程被打断,无法进行完整的登录流程。

    经过几天的钻研,发现问题出在cas server登录流程中的spring web flow流程这一块。

    大致问题如下:

    spring web flow里面跟session进行了绑定操作,conversation这个对象里面存在的对象,嵌套了很多对象,跟session进行绑定的时候直接从session中获取conversation,然后直接修改了conversation之后没有将conversation对象再回放到session中,所以session如果持久化了,webFlow再进行下一个流程从数据库里取session数据就会找不到这个数据,找不到这个数据的后果就是整个webflow流程无法继续进行。

    所以如果session的实现类是操作jvm的内存的话是没有问题,因为取出来之后直接修改就是修改的最真实的对象。但是现在的方案是将session中的值都存在redis中,webFlow代码中很多地方都是直接从session中取值然后进行修改,最终无法体现到redis中,所以会出现登录流程走不通的问题。


    最近发现目前cas源代码太过臃肿,估计是换了一批有一批开发人员维护的原因;每个维护人员的代码风格都不一样,导致源代码修改难度不小;虽然cas那么多年在通用性上面做的还不错,现在的问题就是对集群支持不足。

    解决方案:

    1、使用组播方式实现session复制(session无法持久化,依旧存放在jvm内存中,并且session复制效率较低,可作为暂时性方案)

    2、重新实现cas的登录流程(绕过web-flow登录流程即可,对cas-core源代码足够熟悉可以采用此方案)

    3、使用其他第三方SSO框架或者自己实现一套单点登录系统(推荐此方案)

  • 相关阅读:
    齐文词根词缀---3.12、ced-走
    感悟总结---2104012起(文字收集)
    齐文词根词缀---3.11、log说话
    齐文词根词缀---3.10、cata-向下(和cat,cad,cid,cis是一样的)
    齐文词根词缀---3.9、carn-肉、肉欲
    齐文词根词缀---3.8、capit-头(cap帽子)
    齐文词根词缀---3.7、-tect盖子
    齐文词根词缀---3.6、cant-唱、说
    齐文词根词缀---3.5、cad- / cas- 落下(【音变t-d-s】)
    CURL 发送POST请求
  • 原文地址:https://www.cnblogs.com/eguid/p/6821620.html
Copyright © 2011-2022 走看看