在以前版本的 CAS 中,有一个 login-webflow.xml 文件,其中可以定义无效 eventId 的转换。
从您分享的同一个链接来看,同一个文件似乎位于:src/main/resources/webflow/login-webflow.xml
如果您的构建中没有此文件,则需要将其拉入覆盖中的该路径和地址。对于您共享的版本,文件的原始副本位于:https://github.com/apereo/cas/blob/6.1.x/webapp/cas-server-webapp-resources/src/main/resources/webflow/login/login-webflow.xml
似乎这已被转移到纯 Java 实现中。对吗?
是的。
如果有办法用新的 Java 实现简单地重复这个过程,我一直无法找到这样做所需的资源。如何在新的 CAS 6 中优雅地处理这些错误?
这取决于你所说的“简单”。
- 如果您熟悉 Spring Webflow XML,您可以更改同一个 XML 文件并让它做您想做的事情。通常,这涉及添加全局异常处理程序,以触发您定义的新状态。 简单谷歌搜索发现了这个:
<global-transitions>
<transition on-exception="example.MyBusinessException" to="state3" />
</global-transitions>
- 或者,您共享的同一个链接显示可以在运行时动态更改流,这是推荐的方法,因为 XML 配置最终将被删除(并且已经被删除):
@Override
protected void doInitialize() throws Exception {
final Flow flow = super.getLoginFlow();
// Magic happens; Call 'super' to see what you have access to and alter the flow.
}
在这里,您可以像在 XML 中一样有效地执行相同的操作;为您的特定类型的错误创建异常处理程序并让它导航到不同的状态。超类提供了实用方法,可让您创建状态、视图、转换等。
类似这样的:
val h = new TransitionExecutingFlowExecutionExceptionHandler();
h.add(SomeException.class, "stateId");
flow.getExceptionHandlerSet().add(h);
请参阅:https://fawnoos.com/2021/08/20/cas64-webflow-extensions/(请注意,此处的链接适用于 CAS 6.4.x)