当前位置: 首页 > 知识库问答 >
问题:

Symfony2安全不同的防火墙不能正确重定向到登录

西门骁
2023-03-14

我根据用户类型配置了3个安全区域:管理员、教师和学生。当我访问 /admin时,我被正确地重定向到 /admin/login.但是当我访问 /teacher或 /student重定向失败,尽管我被重定向到 /teacher/login或 /student/login我得到这个错误:

页面重定向不正确Firefox检测到服务器正在以一种永远无法完成的方式重定向对此地址的请求。

这是我的安全。yml


    firewalls:
    # disables authentication for assets and the profiler, adapt it according to your needs
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    admin:
         pattern: ^/admin
         form_login:
             check_path: login_check
             login_path: /admin/login
             provider: chain_provider
             csrf_provider: form.csrf_provider
             default_target_path: /admin
         logout:       true
    teacher:
         pattern: ^/teacher
         form_login:
             check_path: login_check
             login_path: /teacher/login
             provider: chain_provider
             csrf_provider: form.csrf_provider
             default_target_path: /teacher
         logout:       true
    student:
         pattern: ^/student
         form_login:
             check_path: login_check
             login_path: /student/login
             provider: chain_provider
             csrf_provider: form.csrf_provider
             default_target_path: /student
         logout:       true

access_control:
    - { path: ^/admin/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/teacher/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/teacher/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/student/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/student/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, role: ROLE_ADMIN }
    - { path: ^/teacher, role: ROLE_TEACHER }
    - { path: ^/student, role: ROLE_USER }

我需要一些帮助。我错过了什么?谢啦

共有1个答案

梁磊
2023-03-14

您已保护您的登录表单。。。所以当Symfony尝试重定向到您的登录表单时,它尝试重定向到您的登录表单,尝试重定向到您的登录表单,尝试重定向。。。

试试这个:

admin_login:
    pattern:                 ^/admin/login
    anonymous:               ~

admin:
    pattern:                 ^/admin
    form_login:
        login_path:          /admin/login
        check_path:          /login_check
        provider:            chain_provider
        csrf_provider:       form.csrf_provider
        default_target_path: /admin
    logout:
        path:                /logout
        target:              /admin/login

teacher_login:
    pattern:                 ^/teacher/login
    anonymous:               ~

teacher:
    pattern:                 ^/teacher
    form_login:
       ... etc ...

student_login:
    pattern:                 ^/student/login
    anonymous:               ~

student:
    pattern:                 ^/student
    form_login:
        .... etc ...

access_control:
    - { path: ^/admin/login$,   roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/teacher/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/student/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    ...
    - { path: ^/admin,          roles: ROLE_ADMIN }
    - { path: ^/teacher,        roles: ROLE_TEACHER }
    - { path: ^/student,        roles: ROLE_USER }

这在Symfony食谱中的“避免常见陷阱”标题下进行了介绍。

防火墙的顺序很重要

请注意,“登录防火墙”是在其伙伴防火墙之前定义的。

还要注意,我在check_路径的前面添加了一个“/”,以提醒您需要为它定义一个路由。如果您使用注释来定义路由,那么您需要在某个控制器中创建一个空操作方法,以便路由器能够处理一些事情。

你的注销定义在我看来也很可疑。不是说它们完全不正确——只是我以前从未见过它们这样定义,也不确定根据我对交响乐的了解,你的定义会如何工作。

对于我在上面的示例中定义的“/logout”路径,您需要再次为这些路径创建有效的路由。。。即使Symfony实际上不会执行您在控制器中定义的任何“注销”方法。

注销的东西在这里

 类似资料:
  • 基本概念 netfilter Linux 内核包含一个强大的网络过滤子系统 netfilter。netfilter 子系统允许内核模块对遍历系统的每个网络数据包进行检查。这表示在任何传入、传出或转发的网络数据包到达用户空间中的组件之前,都可以通过编程方式检查、修改、丢弃或拒绝。netfilter 是 RHEL 7 计算机上构建防火墙的主要构建块。 尽管系统管理员理论上可以编写自己的内核模块以与 n

  • 可以使用高级安全 Windows 防火墙帮助您保护网络上的计算机。高级安全 Windows 防火墙包括有状态的防火墙,通过该防火墙您可以确定允许在计算机和网络之间传输的网络流量。

  • 我正在使用带有java配置和两个HttpSecurity配置的spring-security 3.2.0.rc2。一个用于REST API,一个用于UI。当我发布到/logout时,它重定向到/login?logout,但随后(错误地)重定向到/login。当我成功地输入用户名和密码时,我会被重定向到登录-注销,并且必须再次输入凭据才能进入主页面。因此,似乎login的permitAll不被用于l

  • 我启动了我的第一个开放存储库项目EphChat,人们很快就开始用大量的请求淹没它。 当前的安全规则如下。 我想限制写(和读?)整个Rooms对象的数据库,因此每秒只能发出1个请求(例如)。

  • 我有一个服务器写在JavaServerSocket。 我有一个客户端,它位于一个公司防火墙之上,除了公共端口之外,它阻止了所有东西。 我已在SMTP端口(#25)上启动服务器。 有防火墙的用户连接到它,到目前为止一切正常。 然后服务器处理ServerSocket.accept()。据我所知,它在一个随机端口上创建一个套接字(每次端口号都不同)。因为防火墙而失败。 我的问题是-如何制作ServerS

  • 我是Spring安全 4 的新手。我已经用支柱 2 和Spring安全性做了一个简单的应用程序。我正在使用自定义登录表单。发生的事情是当我提交登录表单时,我被重定向到 http://localhost:8080/SpringSecurity/admin 但仍然收到以下错误 HTTP状态404- /SpringSecurity/admin 类型状态报告 message/SpringSecurity/