CAS登录后回传除了ticket参数以外的其他自定义参数

在一次项目的技术选型中,选择了easyui+cas+shiro+spring的组合,cas实现了单点登录,这使得在一个应用中嵌入另一个应用的页面来展示数据所涉及到的授权方面变得简单。

由于shiro在判断登录成功后会自动跳转到登录前访问的页面,这就使得在easyui这样的框架下ajax异步加载某个片段页面或iframe页面时正好登录超时,进行登录后就直接跳转到了那一个片段页面或iframe页面的url上了,导致了系统使用上不太友好。

于是决定在每次登录成功后都跳转回首页,这时需要重写shiro官方提供的CasFilter,在onLoginSuccess方法里改用

WebUtils.getAndClearSavedRequest(request);

清除掉其所记录的登录前访问的url信息。

在另外一个同样使用cas服务的应用中,需要iframe引用访问我当前应用的某个需要授权访问的页面,这时跨应用的单点登录也是一次登录的过程,由于我上面对当前应用的登录修改成了登录成功就直接跳转至首页,结果导致访问另外一个应用引用我当前应用的页面时,iframe里引用的页面直接跳转到首页了。

基于上面出现的问题,我决定在进行登录时,由cas返回ticket的同时,也要返回一个标记表明是通过登录页正常登录的还是通过ticket进行单点登录的,于是就有了我下面所研究出的CAS登录后回传除了ticket参数以外的其他自定义参数。

一、重写CAS的以下这几个类:

 

SamlServic类和SimpleWebApplicationServiceImpl类都是在CAS原来的类的基础上新增getResponse的重载方法:

 

CasArgumentExtractor类和SamlArgumentExtractor类的extractServiceInternal方法都是返回上面自己写的类的实例。

SendTicketGrantingTicketAction类主要是添加一个参数标识(之所以在这添加是根据CAS的单点登录访问流程决定的):

 

二、修改

 

 配置文件里的

 

改成自己所写的类。

三、修改

 

配置文件里的

 

改成自己的类。

四、修改

 

配置文件里的

 

改成自己的类。

五、配置文件

 

里增加自己的条件判断

 

这是本人两三年前的干货了,当时把这步骤只是简单的记录到word文档里,如有不正确的地方,欢迎指正。

注:文中提到的CAS版本是3.5.2

原文地址:https://www.cnblogs.com/liuxin-listenx/p/5643168.html