文档章节

CAS-Client客户端研究(一)-AuthenticationFilter

abcijkxyz
 abcijkxyz
发布于 2016/07/08 16:31
字数 615
阅读 7
收藏 0

最近研究CAS,先从客户开始来说明CAS的逻辑,可能会结合源代码。

必要说明:http://blog.csdn.net/yuwenruli/article/details/6602180

先来说说配置过滤器需要的参数吧(参考:http://blog.csdn.net/yuwenruli/article/details/6612010):

必要参数

casServerLoginUrl :定义CAS服务器的登录URL地址,例如: https://localhost:8443/cas/login

service or serverName:

service :发送到CAS服务器的service URL地址,例如https://localhost:8443/yourwebapp/index.html

serverName:CAS客户端的服务器名称,Service URL使用这个名称动态组装,例如:http://localhost:8080 (必须包括协议,如果端口是标准端口则可以不写,例如80端口)

可选参数:

  • renew : 指定renew是否为true,有效值为true和false,如果为true则每次请求都产生新的session。默认是false。
  • gateway - 指定是否使用防火墙,有效值是true和false,默认是false。
  • artifactParameterName - 指定request保存票据的参数名称,默认是ticket。
  • serviceParameterName - 指定request保存service的参数名称,默认是service。

言归正传,现在从第一个Filter开始,下面是这个Filter的逻辑过程。


我们发现这个Filter的职责只是判断是否已经登录,如果没有登录,则根据配置(gateway)来决定条状到什么地方。

我们来看看源代码中怎么做的,

public final void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
        // 转换参数
    	final HttpServletRequest request = (HttpServletRequest) servletRequest;
        final HttpServletResponse response = (HttpServletResponse) servletResponse;
        //从session中取得Assertion
        final HttpSession session = request.getSession(false);
        final Assertion assertion = session != null ? (Assertion) session.getAttribute(CONST_CAS_ASSERTION) : null;
        //如果存在,则说明已经登录,本过滤器处理完成,处理下个过滤器
        if (assertion != null) {
            filterChain.doFilter(request, response);
            return;
        }
        //如果session中没有Assertion对象,组装serviceUrl并试着从参数中取得ticket属性。
        final String serviceUrl = constructServiceUrl(request, response);
        final String ticket = CommonUtils.safeGetParameter(request,getArtifactParameterName());
        final boolean wasGatewayed = this.gatewayStorage.hasGatewayedAlready(request, serviceUrl);
        //如果ticket不为空,或者wasGatewayed为true,则本过滤器处理完成,处理下个过滤器
        if (CommonUtils.isNotBlank(ticket) || wasGatewayed) {
            filterChain.doFilter(request, response);
            return;
        }
        // 定义需要条状的url地址
        final String modifiedServiceUrl;

        log.debug("no ticket and no assertion found");
        //ticket 为空,并且wasGatewayed也为false,则根据初始化参数gateway的值来组装跳转url。
        if (this.gateway) {
            log.debug("setting gateway attribute in session");
            modifiedServiceUrl = this.gatewayStorage.storeGatewayInformation(request, serviceUrl);
        } else {
            modifiedServiceUrl = serviceUrl;
        }

        if (log.isDebugEnabled()) {
            log.debug("Constructed service url: " + modifiedServiceUrl);
        }
        
        //组装跳转url
        final String urlToRedirectTo = CommonUtils.constructRedirectUrl(this.casServerLoginUrl, getServiceParameterName(), 
        		modifiedServiceUrl, this.renew, this.gateway, this.aspId);

        if (log.isDebugEnabled()) {
            log.debug("redirecting to \"" + urlToRedirectTo + "\"");
        }
        //跳转到urlToRedirectTo指定的url,如果没有配置gateway,则跳转到casServerLoginUrl参数指定的url。
        response.sendRedirect(urlToRedirectTo);
    }



本文转载自:http://blog.csdn.net/yuwenruli/article/details/6600032

共有 人打赏支持
abcijkxyz
粉丝 60
博文 6196
码字总数 1876
作品 0
深圳
项目经理
有研究过CAS的吗?客户端程序AuthenticationFilter中的wasGatewayed是干什么用的?

有研究过CAS的吗?客户端程序AuthenticationFilter中的wasGatewayed是干什么用的? final boolean wasGatewayed = this.gatewayStorage.hasGatewayedAlready(request, serviceUrl); 看了源码......

tianhandigeng1498
2013/07/09
452
1
关于spring集成shiro集成CAS的单点登录成功后重定向循环问题的解决办法

本人新手一枚,刚毕业不久,因最近研究shiro与cas单点登录问题,遇上了cas服务器成功登陆后返回到client出现的各种状况表示不胜其烦。 博主一开始参考开涛的shiro集成cas,收获颇丰,然后自己...

Assassin1991
2016/08/27
284
0
cas服务端跳转登录异常,菜鸟求助.

模拟一个CAS客户端和服务端,在服务端访问,没问题,应该,如下图: 之后,我正常登录,可以看到正常提示成功的页面, 之后我配置客户端,用的SpingMVC,部署在同一个tomcat下面,访问页面,...

梦雨_2013
2013/04/12
5K
7
springboot使用cas认证

引入pom java config 其中authenticationRedirectStrategyClass可以用来指定自定义的redirect策略。 application.yaml doc cas-client-autoconfig-support...

go4it
2016/10/25
54
0
单点登录研究

作者:近乎团队 1 单点登录起因和概念 现代企业一般拥有多套业务系统,传统方式下,各业务系统分别维护用户的帐号密码,拥有各自独立的用户信息,这就导致了以下问题: • 用户使用不便:需要...

小近
2014/11/04
679
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

获取多个集合列表的笛卡尔积

获取多个集合笛卡尔积 电商中典型业务场景:商品搜索 单属性属性值之间为并查询 不同属性的属性值之间查询为与查询 import java.util.ArrayList;import java.util.List;/** * Created w...

键走偏锋
8分钟前
0
0
echarts 迁移地图 控制鼠标缩放大小比例

在网上找了好久没有找到解决方式,还是重新看了一下文档,终于找到的解决方案, zoom:1, //默认显示级别 scaleLimit:{min:1,max:3}, // 缩放级别 echarts 文档-配置项链接 http://echarts.b...

心驰
11分钟前
0
0
Boot2Docker ISO is out-of-date,

Boot2Docker ISO is out-of-date, downloading the latest release. 使用docker-machine时无法更新Boot2Docker ISO导致创建vm machine失败 解决方法:关闭网络,创建好之后再开启...

writeademo
19分钟前
0
0
在 Tomcat 中设置 Tapestry 框架的 html 热加载

如果开发中使用到了 Tapestry 这个框架,如果事先没有设置过的话,开发的时候 html 是不会热加载的,也就是说修改了 html 文件,不能刷新浏览器后立马看到修改完的效果,必须先重新启动应用服...

LeoXu
41分钟前
0
0
【微服务】开启巨石应用到微服务的探索

背景 在过去的一年时间里,我一直在从事一件事情,将现有的单体应用(巨石应用)向微服务改造。 接下来,将持续整理一些在微服务路上的学习与成长。 为什么要做微服务 单体应用,开发、部署简...

艳沐石
51分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部