CAS 浅析 - 服务端登录流程简介(二) - login-webflow.xml简介

[b][color=red]声明:这只是个人见解,不代表官方。[/color][/b]




首先他的on-start表示流程开始,开始的时候它会到你的cookie中取Ticket信息。当然,如果你没有登录过Ticket信息当然没有。
cas-servlet.xml里面有initialFlowSetupAction的配置。

p:argumentExtractors-ref="argumentExtractors"
p:warnCookieGenerator-ref="warnCookieGenerator"
p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator" />

其中主要的Code如下:

protected Event doExecute(final RequestContext context) throws Exception {
final HttpServletRequest request = WebUtils.getHttpServletRequest(context);
if (!this.pathPopulated) {
final String contextPath = context.getExternalContext().getContextPath();
final String cookiePath = StringUtils.hasText(contextPath) ? contextPath + "/" : "/";
logger.info("Setting path for cookies to: "
+ cookiePath);
this.warnCookieGenerator.setCookiePath(cookiePath);
this.ticketGrantingTicketCookieGenerator.setCookiePath(cookiePath);
this.pathPopulated = true;
}

context.getFlowScope().put(
"ticketGrantingTicketId", this.ticketGrantingTicketCookieGenerator.retrieveCookieValue(request));
context.getFlowScope().put(
"warnCookieValue",
Boolean.valueOf(this.warnCookieGenerator.retrieveCookieValue(request)));

final Service service = WebUtils.getService(this.argumentExtractors,
context);

context.getFlowScope().put("service", service);

return result("success");
}

接下是判断用户是否已经登录过(也就是否存在Ticket信息):

















如果存在Ticket则表示已经登录过。
1. 如果已经登录,就进行Ticket验证.
(1)如果Ticket验证成功就跳转到成功页面.
(2)如果Ticket验证失败,则重新生成Ticket.
2. 如果未登录,就进行网关验证.
(1)如果网关验证通过就进生成登录的Ticket.
(2)如果网关验证失败,则返回异常。

以上有两个分支都会汇到了重新生成Ticket.其它的分支则已经完成。
以下讲解重新生成Ticket之后的流程:





































重新生成新的Ticket之后,就会跳转到登录页面。
输入登录信息之后进行登录验证,验证通过,则回填Ticket,跳转到成功页面。
验证失败则会重新生成新的Ticket.

你可能感兴趣的:(CAS)