个性化阅读
专注于IT技术分析

如何在Symfony 1.4中通过HTTPS(HTTP over SSL)强制全局访问

本文概述

由于客户端的要求, 很多项目都需要在安全的http上下文中运行。在PHP应用程序中, 这可以通过Apache或Nginx的指令来完成, 但是由于缺乏相关知识或者仅仅是因为你很懒, 我们很多人都不会这样做。

从http到https的这种重定向也可以在你的应用程序中完成。由于Symfony 1.4的工作方式, 可以在全球范围内完成此操作, 并且你可以在几秒钟内将项目的任何URL重定向到其安全版本。在本文中, 我们将向你展示如何在项目中全局强制HTTPS。

1.创建一个安全过滤器

在应用程序的lib目录中创建sfSecureFilter.class.php文件, 例如apps / frontend / lib / sfSecureFilter.class.php, 或者在lib目录中的所有应用程序上全局使用它。该文件将包含sfSecureFilter类作为文件名, 该类扩展了Symfony的sfFilter类:

<?php

// apps/frontend/lib/sfSecureFilter.class.php
// or for all apps
// lib/sfSecureFilter.class.php

class sfSecureFilter extends sfFilter
{
    /**
     * Implements a global redirect from the 'http' to the 'https' version.
     * 
     * @param type $filterChain
     * @return type
     */
    public function execute($filterChain)
    {
        $context = $this->getContext();
        $request = $context->getRequest();

        if (!$request->isSecure())
        {
            $secure_url = str_replace('http', 'https', $request->getUri());

            return $context->getController()->redirect($secure_url);
        }
        else
        {
            $filterChain->execute();
        }
    }
}

execute方法将检索上下文和请求, 并将验证请求是否已得到保护。根据其协议, 如果请求尚未得到保护, 它将自动更改为HTTPS。如果该类未附加到Symfony的筛选器事件, 则该类本身不执行任何操作, 因此, 在创建此文件后继续进行最后一步。

2.注册SSL过滤器

现在, 我们有了一个过滤器类, 可以在不安全的情况下更改协议, 我们需要将其注册到你应用的filters.yml文件中, 特别是在渲染过滤器中, 只需添加带有我们名称的class属性即可。先前创建的类(sfSecureFilter):

# apps/<YourApp>/config/filters.yml

# You can find more information about this file on the symfony website:
# https://symfony.com/legacy/doc/reference/1_4/en/12-Filters

# Run the sfSecureFilter before starting the rendering process
rendering:
  class:  sfSecureFilter

# Don't enable 'sfSecureFilter' in the security filter as this is only
# executed when a module is secured by some rule on 'security.yml'
security: ~
cache:     ~
execution: ~

将更改保存到filters.yml后, 使用php symfony cc清除项目的缓存并访问项目的任何路由。现在, 你将始终自动重定向到它的HTTPS版本。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在Symfony 1.4中通过HTTPS(HTTP over SSL)强制全局访问

评论 抢沙发

评论前必须登录!