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
RouterListener
然后其他侦听器(例如为用户创建令牌所需的安全侦听器)不会触发。
所以, TL; DR 我想知道你是否可以改变核心监听器的优先级顺序。在我的情况下,我希望安全监听器(特别是GuardAuthenticationListener
在RouterListener
之前触发。
有一种解决方法是在symfony应用程序中添加所有路由,即使它们未被处理,这样做至少允许所有侦听器触发,从而给我令牌I需要我的isGranted
支票。
答案 0 :(得分:0)
好的,所以更多地考虑我的解决方法'我可以使用它作为一种更好的方法。所以我把它添加到我的路由..
catch_all:
path: /{route}
requirements:
route: .*
所以所有路线都会被我的Symfony应用程序捕获,从而通过听众的舞蹈,如果不处理,最终会落入遗留应用程序。邦扎。