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

本文概述

  • 1.创建一个安全过滤器
  • 2.注册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.phpclass 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 processrendering: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: ~

【如何在Symfony 1.4中通过HTTPS(HTTP over SSL)强制全局访问】将更改保存到filters.yml后, 使用php symfony cc清除项目的缓存并访问项目的任何路由。现在, 你将始终自动重定向到它的HTTPS版本。
编码愉快!

    推荐阅读