安全上下文异常,即使我有一个默认的主防火墙



我使用symfony2和FOSUserBundle。我有一个防火墙用于登录,一个用于资产和一个主要的捕获一切。但我还是得到了"没有保安"。当一个路由没有被任何防火墙覆盖,而你试图用"is_granting"访问它时抛出异常(在这里看到并解决)。路由是mydomain/de_DE/area,其中de_DE部分显然是我的{_locale}。下面是我的FOSUserBundle配置,来自config.yml。

  firewalls:
    login_firewall:
      pattern:    ^/(de_DE|de_CH)/(login|resetting)$
      anonymous:  true
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout
    assets_localeless:
      pattern:    ^/(compiled|web|js|css|_wdt|_profiler)/$
      anonymous:  true
    main:
      pattern: ^/$
      anonymous:  false
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout
  access_control:
    - { path: ^/(compiled|web|js|css|_wdt|_profiler)$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/(de_DE|de_CH)/(login|resetting)$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/(de_DE|de_CH)/(my-admin|admin), role: ROLE_ADMIN }
    - { path: ^/(de_DE|de_CH)/$, role: ROLE_USER }
  role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN

编辑/解决方案:我的问题是正则表达式。我对这个教程有一个误解。所以模式是普通的RegEx,这就是为什么我的防火墙都不起作用(见答案)。新的设置如下:

  firewalls:
    main:
      pattern: .
      anonymous:  true
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout
  access_control:
    - { path: '^/(compiled|web|js|css|_wdt|_profiler)([wd/_-]{0,})', role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/([w]{0,})/(login|resetting|sale|imprint|contact)([wd/_-]{0,})', role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: '^/([w]{0,})/(my-admin|admin)([wd/_-]{0,})', role: ROLE_ADMIN }
    - { path: '^/([w]{0,})/([wd/_-]{0,})', role: IS_AUTHENTICATED_FULLY }

mydomain/de_DE/area没有防火墙配置…这就是你没有保安的原因。

$表示在正则表达式中结束。这就是为什么. .

- { path: ^/(de_DE|de_CH)/$, role: ROLE_USER }

yourdomain/de_DE/
yourdomain/de_CH/

相关内容