cas默认是跳转到服务器端的登录页面,而公司的项目是希望用自己客户端定义的登录页面,而且各个系统还暂时保留着原先的登录页面,所以开始研究怎么让它在客户端登录,这也是我研究cas以来遇到的最大的坎,还好过去了。
一、修改原理
对cas服务器的登录流程(大家可以看看第二篇文章)进行了修改,如下图:
图4 修改后的登录流程
图中红色部分为我们修改的流程节点,这里我们增加了一个开始节点remoteLogin和一个结束节点remoteCallbackView,删除了原有的loginFormView节点、viewGenericLoginSuccess节点,
然后将所有这些节点的转向全部都转向到remoteCallbackView节点,因为登陆和显示登陆成功信息都应该是客户端完成的.
二、修改原则:
修改需要基于几个基本原则:
1.不影响原有统一登陆界面功能
2.客户端应尽量保持简单
3.尽量保证原有功能的完整性和安全性
三、修改具体流程:
首先,修改/WEB-INF/web.xml,为cas增加一个/remoteLogin的映射:
<servlet-mapping>
<servlet-name>cas</servlet-name>
<url-pattern>/remoteLogin</url-pattern>
</servlet-mapping>
然后修改cas-servlet.xml文件,增加我们对/remoteLogin映射的处理,需要增加一个新流程:
<!-- Handler Mapping -->
<bean id="handlerMappingB" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property
name="mappings">
<props>
<prop
key="/login">loginController</prop>
<prop key="/remoteLogin">remoteLoginController</prop>
</props>
</property>
<property
name="interceptors">
<list>
<ref bean="localeChangeInterceptor" />
</list>
</property>
</bean>
然后在cas-servlet.xml文件中添加我们上面所配置的remoteController的bean:
<!-- 增加远程控制者,允许以/remote请求启动remote控制流程 -->
<bean id="remoteLoginController"
class="org.springframework.webflow.executor.mvc.FlowController"
p:flowExecutor-ref="remoteLoginFlowExecutor"
p:defaultFlowId="remoteLogin-webflow">
<property name="argumentHandler">
<bean
class="org.springframework.webflow.executor.support.RequestParameterFlowExecutorArgumentHandler"
p:flowExecutionKeyArgumentName="lt"
p:defaultFlowId="remoteLogin-webflow" />
</property>
</bean>
<flow:executor id="remoteLoginFlowExecutor" registry-ref="remot