该部分主要是讲解在CAS server中登录流程的定义以及相关源码分析。我们注重的更多是与CAS相关的业务部分。所以,我们重点是对登录流程的讲解。具体涉及到webflow的知识点,我会粗略的讲解一下,但不会针对webflow的原理或源码进行大篇幅的讲解。想深入理解webflow工作原理的读者需要参考官方的webflow2.21版本的reference。
Webflow与Spring MVC集成
在server工程下,看web.xml文件中定义了一个cas的servlet,该类中并没有太多的业务逻辑,但是该类中持有了一个DispatcherServlet。该类是spring MVC的核心类。也是处理请求的实际的业务类。通过该类的实例,cas server将用户发往cas servlet的请求交给spring MVC处理。
Spring MVC核心配置文件是cas-servlet.xml。在该文件中,webflow将于springMVC进行集成。
下面,我们就从login开始说起。
<!-- 根据工作流定义,生成一个执行器 -->
??? <webflow:flow-executor id="flowExecutor" flow-registry="flowRegistry">
??????? <webflow:flow-execution-attributes>
??????????? <webflow:always-redirect-on-pause value="false" />
??????? </webflow:flow-execution-attributes>
??? </webflow:flow-executor>
?
??? <!-- 注册一个工作流? id是子路径? 为flow入口-->
??? <webflow:flow-registry id="flowRegistry" flow-builder-services="builder">
??????? <webflow:flow-location path="/WEB-INF/login-webflow.xml" id="login" />
??? </webflow:flow-registry>
?
<webflow:flow-builder-services id="builder" view-factory-creator="viewFactoryCreator" expression-parser="expressionParser" />
?
?
在该文件中,我们可以看到上面的配置项。这就是将webflow框架作为spring MVC的一个节点来进行配置。
webflow:flow-registry节点就是注册了一个webflow流程,该流程的入口,也就是ID=“login”。这样,交给springMVC的请求路径如果是login的,则有springMVC交给webflow处理。
在webflow中,会定义一些视图,这些视图都是以view=”XXX”的形式存在的。那么XXX又是如何找到对应的页面呢??看flow-builder-services节点,我们会发现有个view-factory-creator属性,该属性就定义了视图解析工厂。
该视图解析工厂是由视图解析器组成的。这里只定义了一个视图解析器,就是viewResolvers。该视图解析器是springFramework中的ResourceBundleViewResolver的一个实例,该类可以通过basenames属性,找到value值对应的properties属性文件,该文件中式类似ke=values类型的内容,正是该文件将jsp文件映射成视图名称。
至此,springMVC与webflow已经集成完毕。