[心缘地方]同学录
首页 | 功能说明 | 站长通知 | 最近更新 | 编码查看转换 | 代码下载 | 常见问题及讨论 | 《深入解析ASP核心技术》 | 王小鸭自动发工资条VBA版
登录系统:用户名: 密码: 如果要讨论问题,请先注册。

[转帖]cas server端的login-webflow详细流程

上一篇:[转帖]CAS认证流程详解
下一篇:[转帖]CAS增加登录验证码

添加日期:2013/9/13 17:58:43 快速返回   返回列表 阅读6179次
http://blog.csdn.net/yaoweijq/article/details/6044941

login-webflow是当你在浏览器里面输入https://localhost:8080/cas/login?param_list

后,cas server端如何处理的.

它实际上是spring-webflow的应用,有关spring-webflow的详细介绍,网上铺天盖地,我就不啰嗦了
---------------------------------------
cas server端的web.xml文件里面有


 <servlet>
  <servlet-name>cas</servlet-name>
  <servlet-class>
   org.jasig.cas.web.init.SafeDispatcherServlet
  </servlet-class>
  <init-param>
   <param-name>publishContext</param-name>
   <param-value>false</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
 </servlet>


这个是login-webflow的入口servlet,映射的url-pattern之一就是

<servlet-mapping>
  <servlet-name>cas</servlet-name>
  <url-pattern>/login</url-pattern>
 </servlet-mapping>

即login
---------------------------------------------
spring webflow必须在flow-registry里面注册,

这个是在cas-servlet.xml里面注册的


<webflow:flow-registry id="flowRegistry" flow-builder-services="builder">
        <webflow:flow-location path="/WEB-INF/login-webflow.xml" id="login" />
    </webflow:flow-registry> 


这句话把login-webflow.xml进行了注册
--------------------------------------------
同时呢

对应的view properties在propertyFileConfigurer.xml中指定了

<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
  p:location="/WEB-INF/cas.properties" />

打开cas.properties

cas.themeResolver.defaultThemeName=default
cas.viewResolver.basename=default_views

对应了default.properties

         default_views.properties

这两个properties里面放了对应的css js 和jsp的路径,大家一定要注意。

OK,基本的配置就是这些,
-----------------------------------------------
下面我们重点来关注下login-webflow.xml

里面是一个具体的spring webflow流程

涉及到的结点有on-start 流程开始

end-state流程结束 decision-state判断,类似于if

view-state对应jsp页面 action-state对应执行程序的某段

里面的<evaluate expression="initialFlowSetupAction" />这些定义在cas-servlet.xml中

view-state里面的view定义在default_views.properties中
------------------------------------------
下面简单介绍下里面的语句说明

<evaluate expression="initialFlowSetupAction" />

这句话的意思是执行

org.jasig.cas.web.flow.InitialFlowSetupAction中的doExecute方法

其中的变量都由spring注入了

具体看对应的配置文件
-------------------------------------
然后下一个流程是


<decision-state id="ticketGrantingTicketExistsCheck">
  <if test="flowScope.ticketGrantingTicketId neq null" then="hasServiceCheck" else="gatewayRequestCheck" />
 </decision-state>


进行判断

flowScope.ticketGrantingTicketId

这个在org.jasig.cas.web.flow.InitialFlowSetupAction中由

context.getFlowScope().put(
            "ticketGrantingTicketId", this.ticketGrantingTicketCookieGenerator.retrieveCookieValue(request));

这句话放入了,然后在这儿进行检测neq null是不为null的意思

then else都很好理解
---------------------------------
view state


<view-state id="viewLoginForm" view="casLoginView" model="credentials">
        <var name="credentials" class="org.jasig.cas.authentication.principal.UsernamePasswordCredentials" />
        <binder>
            <binding property="username" />
            <binding property="password" />
        </binder>
        <on-entry>
            <set name="viewScope.commandName" value="'credentials'" />
        </on-entry>
  <transition on="submit" bind="true" validate="true" to="realSubmit">
            <set name="flowScope.credentials" value="credentials" />
            <evaluate expression="authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />
        </transition>
 </view-state>


对应的是casLoginView.jsp

在这里对一些页面变量和对应的java类进行了绑定
---------------------------------------
action state


<action-state id="realSubmit">
        <evaluate expression="authenticationViaFormAction.submit(flowRequestContext, flowScope.credentials, messageContext)" />
  <transition on="warn" to="warn" />
  <transition on="success" to="sendTicketGrantingTicket" />
  <transition on="error" to="viewLoginForm" />
 </action-state>


执行对应的方法,这儿执行org.jasig.cas.web.flow.AuthenticationViaFormAction中的

submit方法,并根据返回值到不同的分支

这块要弄清楚不容易,建议多看看相关资料,

里面倒腾还是很多的。
 

评论 COMMENTS
没有评论 No Comments.

添加评论 Add new comment.
昵称 Name:
评论内容 Comment:
验证码(不区分大小写)
Validation Code:
(not case sensitive)
看不清?点这里换一张!(Change it here!)
 
评论由管理员查看后才能显示。the comment will be showed after it is checked by admin.
CopyRight © 心缘地方 2005-2999. All Rights Reserved