Symfony2:如何通过IP地址限制/拒绝访问某些路由?

时间:2015-03-28 10:53:19

标签: symfony fosuserbundle access-control

如果客户的IP地址被禁止,我想禁止访问/login/register

禁止IP的(黑色)列表存储在数据库中。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

从symfony 2.4开始,您可以在配置文件中使用Expression Language Component

现在实施简单的IP检查很简单:

  • 使用从您的存储层获取禁止IP列表的方法(即access_manager)创建服务(即getBannedIPs()
  • 在安全配置中添加一个表达式,将返回的数组与客户端的IP地址进行比较
  • 就是这样。

例如

# app/config/security.yml
security:
    # ...
    access_control:
        - path: ^/(login|register)$
          allow_if: "request.getClientIp() not in @=service('access_manager').getBannedIPs()"

答案 1 :(得分:2)

使用控制器事件(首选)

您可以在注册控制器上订阅活动。

如需注册,您可以订阅REGISTRATION_INITIALIZE活动。

以下是controller events的文档。

覆盖控制器方法

第二个解决方案是override login and register controller methods,但您必须复制登录/注册操作的所有代码。

相关问题