关于cas单点登录,各应用系统怎么知道是否已经登录了呢?即输入子系统url如:http://127.0.0.1:8080/testProject,cas怎么知道该浏览器是否登录,是否应该拦截到cas?

关于cas单点登录,各应用系统怎么知道是否已经登录了呢?即输入子系统url如:http://127.0.0.1:8080/testProject,cas怎么知道该浏览器是否登录,是否应该拦截到cas去登录?

核心是:用户自己定义的拦截器,AuthenticationFilter,在web.xml中配置,是用户自己定义的。

过程

1输入http://127.0.0.1:8080/syjsscxypjgl/

2syjsscxypjgl用户自己定义的拦截器,AuthenticationFilter拦截到http://127.0.0.1:8080/casPortal/login去运行(不管用户是否登录,就算登录了也得去caslogin去运行)

判断用户是否登录。(就算你在casportal登录了,你第一次访问http://127.0.0.1:8080/syjsscxypjgl/,assertion还是null。等第二次再访问http://127.0.0.1:8080/syjsscxypjgl/,assertion就不是null

 

3.1如果用户没有登录,被拦截到cas登录页面去登录

···略

3.2如果用户已经登录

3.2.1cas返回一个ticktsyjsscxypjgl

3.2.2syjsscxypjgl拿到tickt后,还要再去cas去验证是否有效(为的是防止ticktcassyjsscxypjgl传递的过程中被恶意篡改)

3.2.3如果ticket有效,写入sessionattributeCONST_CAS_ASSERTION,说明syjsscxypjgl已经登录,并运行http://127.0.0.1:8080/syjsscxypjgl/,进入syjsscxypjgl主页。

cas登录,和syjsscxypjgl登录,是两回事。

cas登录是你用户名密码,点击登录,就说明登录了。

syjsscxypjgl登录,是CONST_CAS_ASSERTION被写入才证明登录了。


------

其中还有一个XXListener.java,这个用户自定义的监听,是用来设置各应用子系统的当前登录用户基本信息的(为了便于编程使用,因为会用到获取当前用户名、机构等信息).



---------

参考连接:

https://blog.csdn.net/kongls08/article/details/9222969


猜你喜欢

转载自blog.csdn.net/ideality_hunter/article/details/80591722
今日推荐