如果我还使用 "security.yaml" 配置安全性,为什么“@IsGranted”注释不起作用?

Why does the "@IsGranted" annotation does not work if I also configure security using "security.yaml"?

我有一个controller,我用@IsGranted(IS_AUTHENTICATED_ANONYMOUSLY)注解允许所有用户访问,我还有一个security.yaml.

但是我的注解好像不起作用。

控制器

    /**
     * @Route("/example",name="app_example")
     * @IsGranted("IS_AUTHENTICATED_ANONYMOUSLY")
     */
    public function example(): RedirectResponse
    {
        /// omit
    }

security.yaml

  access_control:
    - { path: ^/, roles: ROLE_ADMIN }

当我访问 /example 时,系统要求我登录。

我知道我可以通过将 IS_AUTHENTICATED_ANONYMOUSLY 移动到 security.yaml 来管理,但我想知道如何使用注释。

@IsGranted()(来自 SensioFrameworkExtraBundle)在 Symfony 安全访问控制 之后的事件上被检查。

由于您的配置相互矛盾(您的主要安全配置要求对 所有 路由进行身份验证,而您控制器上的注释只是说“此路由不进行身份验证”),主要安全配置“wins”。

如果你想在配置文件中同时使用安全配置作为注解,配置不能重叠和相互矛盾。

如果它们发生冲突,为了使 @IsGranted() 注释起作用,它们可以 比主要安全配置更严格,但不会 更开放.