开源的CAS已经很多牛人分析过了,最近在看源码,也总结一下


在login-webflow.xml中,初次访问应用的flow轨迹是:


  1

       

   



  2

        

   



  3

        

    


  4

       

        

    



所以代码会执行到generateLoginTicketAction中

GenerateLoginTicketAction.java

    public final String generate(final RequestContext context) {

       //通过DefaultUniqueTicketIdGenerator生成loginTicket,可以通过实现接口UniqueTicketIdGenerator.java,来自己定义生成loginTicket的格式

        final String loginTicket = this.ticketIdGenerator.getNewTicketId(PREFIX);

        this.logger.debug("Generated login ticket " + loginTicket);

        //把ticket放入FlowScope

        WebUtils.putLoginTicket(context, loginTicket);

        return "generated";

    }

返回后,跳转到“viewLoginForm”


       

           

           

       

       

           

       

        

            authenticationViaFormAction.doBind(flowRequestContext, flowScope.credentials)" />

       


default_view.properties已经定义好了:casLoginView.url=/WEB-INF/view/jsp/default/ui/casLoginView.jsp

浏览器会跳转到casLoginView.jsp让用户登陆,用户在casLoginView.jsp执行submit动作时,evaluate 元素中 expression 属性所指明的表达式会被执行,即标红的部分。表达式内容执行完成后,转向id为realSubmit的state


   

    

    

    

    

   

   

   

   

   


在realSubmit中,根据表达式“authenticationViaFormAction.submit(flowRequestContext, flowScope.credentials, messageContext)”的不同返回值跳转到不同的界面