zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    13.ng-value
    Android 下使用 JSON 实现 HTTP 请求,外加几个示例!
    PHP完整的AES加解密算法使用及例子(256位)
    常用对称加密算法(DES/AES)类(PHP)
    随机字符串生成算法
    JAVA实现AES加密
    Base64的好处
    什么是VC、PE、LP、GP?
    mysql update操作
    iOS开发:用DES对字符串加解密
  • 原文地址:https://www.cnblogs.com/liuxin-listenx/p/5643168.html
Copyright © 2011-2022 走看看