2016-03-04 82 views
0

TL的順序; DR 你可以設置symfony核心聽衆的優先級,以便將GuardAuthenticationListenerRouterListener之前進行發射修改核心聽衆

-

我有一箇舊的應用程序和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的應用程序存在的路線由RouterListener那麼其他聽衆扔NotFoundException(如(即它屬於通過對遺留應用程序)爲用戶創建令牌所需的安全監聽器)不會觸發。

因此,TL; DR我想知道您是否可以更改核心偵聽器的優先級順序。在我的情況,我想安全監聽器(尤其是GuardAuthenticationListenerRouterListener之前解僱。

有一種解決方法是增加所有航線symfony的應用程序,即使他們沒有被處理,這樣做至少允許所有的聽衆開火,並因此給我我需要的令牌isGranted檢查

+0

僅供參考:如果您絕對需要這樣做才能使您的應用程序正常工作,那麼在99.9%的情況下,您有一個根本性錯誤的設計。 –

回答

0

好吧,想更多關於我的'解決方法',我可以使用它作爲一種更好的方法。我的路由..

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

因此,所有路線都會陷入我的Symfony應用程序中,因此會通過聽衆跳舞,最終如果沒有處理,就會流向遺留應用程序。邦扎。