【问题标题】:Amend order of core listeners修改核心监听器的顺序
【发布时间】:2016-06-18 12:41:50
【问题描述】:

TL;DR 你能设置核心 Symfony 监听器的优先级,以便 GuardAuthenticationListener 将在 之前 RouterListener 触发吗?

--

我有一个旧版应用程序和 symfony '微内核' 应用程序并排放置,尽管两者有些交织在一起,因为 symfony 应用程序在某些时候需要使用旧版应用程序中的位,现在我第一次需要从遗留应用程序中调用一些 symfony 的东西。

在我详细介绍之前,这里有一些关于设置的背景资料http://jenko.me/legacy/2016/02/03/an-escape-route-from-legacy-with-stackphp-and-the-symfony-microkernel/

所以我正在将遗留应用程序的安全方面迁移到 Symfony,总而言之,这并不算太糟糕,部分原因在于这篇博文 http://php-and-symfony.matthiasnoback.nl/2012/07/symfony2-security-using-advanced-request-matchers-to-activate-firewalls/ 和我之前提到的博文中概述的技术.对于基于 URL 的访问控制,这一切都很好。

遗留代码中有一些地方我需要调用isGranted() 来检查用户是否有权限。如果路由存在于 Symfony 应用程序中,这一切都可以正常工作,即它已经完成了 Symfony 生命周期并且所有侦听器都已触发。

我的问题在于,当应用程序有一个 存在于 symfony 应用程序中的路由时(即它落入旧版应用程序),通过在 @ 中抛出 NotFoundException 987654327@ 然后其他侦听器(例如为用户创建令牌所需的安全侦听器)不会触发。

所以,TL;DR 我想知道您是否可以更改核心侦听器的优先级顺序。就我而言,我希望安全监听器(特别是 GuardAuthenticationListenerRouterListener 之前触发。

有一种解决方法是在 symfony 应用程序中添加 all 路由,即使它们没有被处理,这样做至少可以让所有侦听器触发,从而给我我的令牌需要我的isGranted 支票。

【问题讨论】:

  • 仅供参考:如果您绝对必须这样做才能使您的应用程序正常工作,那么在 99.9% 的情况下,您的设计根本上是错误的。

标签: php symfony


【解决方案1】:

好的,所以我想更多地考虑我的“解决方法”,我可以将其用作更好的方法。所以我将此添加到我的路由中..

catch_all:
    path: /{route}
    requirements:
        route: .*

所以所有路由都将被我的 Symfony 应用程序捕获,因此会经历监听器的舞蹈,如果不处理,最终会落入旧版应用程序。邦扎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2014-07-12
    • 2012-04-28
    • 1970-01-01
    相关资源
    最近更新 更多