【问题标题】:Handling Invalid _eventId in CAS 6.X在 CAS 6.X 中处理无效的 _eventId
【发布时间】:2021-09-23 20:46:54
【问题描述】:

当 Spring Webflow 接收到无效的 eventId 时,它会抛出 NoMatchingTransitionException。反过来,这会引发漏洞扫描程序检测到的 500 错误。 CAS 6.X 使用自定义 webflow 来实现它的登录功能。根据下面“快乐生活”标题下的链接,CAS 文档似乎对更改流程不满意。

https://apereo.github.io/cas/6.1.x/webflow/Webflow-Customization-Extensions.html

我需要能够处理这些错误并抛出另一个状态,例如 400 错误请求。在以前的 CAS 版本中,有一个 login-webflow.xml 文件,其中可以定义无效 eventIds 的转换。我意识到这正在改变流程,但似乎相当安全和直观。似乎这已被转移到纯 Java 实现中。那是对的吗?如果有办法用新的 Java 实现简单地重复这个过程,我一直找不到这样做所需的资源。

如何在新的 CAS 6 中优雅地处理这些错误?

【问题讨论】:

    标签: spring-boot exception error-handling cas spring-webflow


    【解决方案1】:

    在以前版本的 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)

    【讨论】:

      猜你喜欢
      • 2013-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 2015-07-16
      • 2010-10-28
      • 2014-05-20
      • 1970-01-01
      相关资源
      最近更新 更多