zoukankan      html  css  js  c++  java
  • cas server端的loginwebflow详细流程

    login-webflow是当你在浏览器里面输入https://uia.comsys.net.cn/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方法,并根据返回值到不同的分支

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

    里面倒腾还是很多的。

    转自:http://www.cnblogs.com/jifeng/archive/2011/08/07/2129988.html

  • 相关阅读:
    Python相关数据结构的排序
    使用OpenCV和Python构建运动热图视频
    使用AI来检测违反社交距离的行为
    基于Python、Keras和OpenCV的实时人脸活体检测
    每个人都应该知道的十大OpenCV函数
    入门用Python进行Web爬取数据:为数据科学项目提取数据的有效方法
    入门深度学习?这里有5件你应该知道的事
    基于YoloV3卫星图像的储油罐容积占用率研究
    生产中的NLP:创建Docker镜像
    使用Python可视化Word2vec的结果
  • 原文地址:https://www.cnblogs.com/lake1984/p/4433963.html
Copyright © 2011-2022 走看看