【发布时间】: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 我想知道您是否可以更改核心侦听器的优先级顺序。就我而言,我希望安全监听器(特别是 GuardAuthenticationListener 在 RouterListener 之前触发。
有一种解决方法是在 symfony 应用程序中添加 all 路由,即使它们没有被处理,这样做至少可以让所有侦听器触发,从而给我我的令牌需要我的isGranted 支票。
【问题讨论】:
-
仅供参考:如果您绝对必须这样做才能使您的应用程序正常工作,那么在 99.9% 的情况下,您的设计根本上是错误的。