我正在使用 CAS,刚刚从 3.4.8 更新到 3.5.1。我认为我已经处理了大部分的一千个变化。但是,完成后的 externalRedirect 似乎以某种方式被破坏了。它只是循环回到登录网络流的开始。这怎么可能发生?
这是达到的最终状态:
<!-- The "redirect" end state allows CAS to properly end the workflow while
still redirecting the user back to the service required. -->
<end-state id="redirectView"
view="externalRedirect:${requestScope.response.url}" />
我知道它已经到达,因为我在这个方法(的org.springframework.webflow.action.ExternalRedirectAction
)中设置了一个断点:
protected Event doExecute(RequestContext context) throws Exception {
String resourceUri = (String) this.resourceUri.getValue(context);
context.getExternalContext().requestExternalRedirect(resourceUri);
return success();
}
如果我在此方法返回之前检查 resourceUri 的值,我会看到此请求应重定向到的 uri:
http://mycompany.com:8080/c/portal/login?redirect=%2Fweb%2Fguest%2Fhome&ticket=ST-4-jVOtEEZcy9bXdb4xiV3l-cas
但是,如果我只是从该断点运行,而不是被重定向到该页面,则相同的登录 Web 流程会重新开始。这里发生了什么?我应该去哪里看?关于调试的任何提示?
- - - - - - - - 更新 - - - - - - - -
所以在对代码进行了 0 次修改后,只需添加一些额外的断点,它现在就可以按预期工作了。我不知道这里发生了什么,但我终于找到了实际重定向发生的地方。对于那些感兴趣的人,重定向发生在:
org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handleFlowExecutionResult(
FlowExecutionResult result, ServletExternalContext context,
HttpServletRequest request, HttpServletResponse response, FlowHandler handler)