本文主要是给自己做一个记录,防止遗忘,主要是针对想debug源码的,如果想debug源码可以看看,本人在公司负责搭建单点登录服务端,过程中遇到诸多小问题,cas的搭建很简单,根据cas官方网站资料即可完成基础的环境搭建,但是搭建完成后需要根据公司要求做一些个性化处理时需要对cas的整个认证过程有一个清晰的认识才能够高效的完成后面的个性化需求,在这里把本人已经花时间找出来的一些东西分享出来 ,也给自己留一个可追溯的资料
文中的类或者或者代码在工程中找不到可以按照下面的方式找到
1.在官方的github仓库或者下载到本地搜索类名,cas源码仓库地址
2.将类所在的jar 导入到自己的cas工程
3.这样就可以debug了
简单示范
追溯cas认证的整个流程
cas认证都有两种方式:
1.直接定向到cas提供好的登录页面完成登录动作
2.自己实现restful接口完成登录动作
第一种方式实现简单,但是代码流向一开始很模糊,根据源码跟踪,需要花费一定时间才能全部理清楚,这里把本人整理的代码流向整理了一下,便于对cas认证的整个过程有个清晰的认识,方便后面针对个性化需求,按照cas官方提供的扩展进行需求开发
- 我们都很清楚,在我们接入cas后,我们会被重定向到一个登陆页面,在搭建的过程中,我们都了解到了cas的登陆流程是采用的spring web flow,于是可以找到webflow的配置文档,在官方提供的org.apereo.cas.cas-server-webapp-tomcat-5.2.2包下面我们可以找到login-webflow.xml,根据该配置文件内容可以找到
view-state id="viewLoginForm" view="casLoginView" 【所以对应的登陆页面就是casLoginView.html】
- 找到了登陆入口,那么可以找到登录动作触发的动作,在casLoginView.html,可以找到如下的登陆信息
<div class="form-group">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="submit"/>
<input type="hidden" name="geolocation"/>
<a class="btn btn-lg btn-primary btn-block" id="denglu" onclick="login()">登录</a>
</div>
- 根据_eventId可以确定触发的是login-webflow.xml中定义的submit 动作,根据配置文件可以submit对应的工作处理流程
<view-state id="viewLoginForm" view="casLoginView" model="credential">
<binder>
<binding property="username" required="true"/>
<binding property="password" required="true"/>
<binding property="captcha" required="true" />
</binder>
<transition on="submit" bind="true" validate="true" to="realSubmit" history="invalidate"/>
</view-state>
<action-state id="realSubmit">
<evaluate expression="authenticationViaFormAction"/>
<transition on="warn"