最近改了下之前用symfony做的项目,然后,突然发现防火墙失效了,简单说就是再未登录状态下居然可以访问配置了ROLE_USER、ROLE_ADMIN这些权限的路由,symfony框架很强大,但是文档太拉跨,尤其关于防火墙配置这块真的就是说了个屁。由于时间过的太久,一些防火墙配置的关键特性忘记了,排查解决这个问题花了1天时间、郁闷,做个笔记吧,避免下次再忘。。。

symfony的安全组件名为 symfony/security-bundle,一般创建项目后就已经有了,也可以单独composer require;

配置

配置文件:

# config/packages/security.yaml

安全组件配置的几个关键特性:

  1. providers 用户提供者(至少有一个)一般为用户实体
  2. firewalls 防火墙(可以有多个,通过firewalls.pattern属性里的正则匹配路由)
  3. guard.authenticators 路由守卫/身份验证程序(一个服务名)
  4. access_control 访问控制指定某个/某些路由的访问权限(可以使用正则,更精确的匹配规则会覆盖宽泛的匹配规则)

案例:

# config/packages/security.yaml
security:
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers providers:
# users_in_memory: { memory: null }
app_user_provider:
entity:
class: 'App\Entity\User'
property: 'username' firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false api:
pattern: ^/api/
stateless: true
anonymous: true
provider: app_user_provider
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator main:
pattern: ^/_api/
stateless: true
anonymous: true
# anonymous: lazy
provider: app_user_provider
# logout: ~
# json_login:
# check_path: /_api/authentication
# username_path: username
# password_path: password
# success_handler: lexik_jwt_authentication.handler.authentication_success
# failure_handler: lexik_jwt_authentication.handler.authentication_failure
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator # 7-31
encoders:
# legacy:
# algorithm: sha256
# encode_as_base64: false
# iterations: 1 # use your user class name here
App\Entity\User:
# the new encoder, along with its options
algorithm: sha256 # 指定用户密码的编码算法
migrate_from:
- bcrypt # uses the "bcrypt" encoder with the default options
- legacy # uses the "legacy" encoder configured above # Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
# 无需登录的路由
- { path: /_api/pano_like, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/project/rand, roles: IS_AUTHENTICATED_ANONYMOUSLY }
# 登录注册相关
- { path: /_api/authentication, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/refresh, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/auth_code, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /_api/reset_pass_auth_code, roles: IS_AUTHENTICATED_ANONYMOUSLY }
# api 文档页
- { path: ^/api$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
# - { path: /, roles: IS_AUTHENTICATED_ANONYMOUSLY } # 需要控制权限的路由
- { path: ^/api/, roles: ROLE_USER }
- { path: ^/_api/, roles: ROLE_USER }
- { path: ^/admin, roles: ROLE_ADMIN } # 角色分层
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
^ROLE_CUSTOM_: ROLE_USER #自定义角色继承ROLE_USER


我这里使用的是symfony4.4,其他版本类似。

官方文档:安全性 (Symfony 4.4 Docs)

symfony框架安全组件(security)防火墙配置的更多相关文章

  1. Vue 框架-11-介绍src文件流程及根组件app+HBuilder 配置

    Vue 框架-11-介绍src文件流程及根组件app+HBuilder 配置 这是上一篇对目录简单介绍: 关于编辑器,可以使用轻量级的 Sublime Text 3,我使用的是 HBuilder, 但 ...

  2. Linux防火墙配置与管理(16)

    防火墙指的是一个由软件和硬件设备组合而成.在内部网和外部网之间.专用网与公共网之间的边界上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intra ...

  3. Symfony 框架实战教程——第一天:创建项目(转)

    这个系列的实战博客真是太有用了,很多例子自己调试也是通的,不同于很多网上不同的实战例子...附上原文地址  https://www.chrisyue.com/symfony-in-action-day ...

  4. Security命名空间配置

    http://www.mossle.com/docs/springsecurity3/html/ns-config.html Security命名空间配置 2.1. 介绍 从Spring-2.0开始可 ...

  5. Spring mvc Security安全配置

    Spring Security笔记:自定义Login/Logout Filter.AuthenticationProvider.AuthenticationToken SPRING SECURITY ...

  6. 6. Samba服务和防火墙配置笔记

    Samba文件服务器 (一)简介 内网文件服务器 windows-windows 文件共享服务 网络邻居linux-linux NFS windows-linux Samba (二)端口 smbd: ...

  7. setup 命令中防火墙配置选项无法打开

    故障提示 1.1 如何让setup 命令中防火墙配置生效 1.1.1 CentOS系统找不到setup命令工具的解决方法 yum -y install setuptool #安装setup命令工具 y ...

  8. Spring Security 入门(1-2)Spring Security - 从 配置例子例子 开始我们的学习历程

    1.Spring Security 的配置文件 我们需要为 Spring Security 专门建立一个 Spring 的配置文件,该文件就专门用来作为 Spring Security 的配置. &l ...

  9. 迷你MVVM框架 avalonjs 组件编写指南

    avalon经过半年的宣传,已经有不少公司在使用avalon应用于它们内外网应用或移动项目,比较大牌的客户有百度,搜狐,金山,边缘,去哪儿--最近成为去哪儿的前端架构师后,掌握更多资源,可以随使抓个人 ...

  10. Django之REST_framework 框架基本组件使用

    快速实例 快速实例: 点击查看官方文档 阅读推荐:点击查看 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如j ...

随机推荐

  1. 记一次DAC转换功能修改的解决

    最近的项目捣鼓msp430需要用到dac转换以输出模拟信号,项目代码是接手前同事的 有些地方调试不通,以前没有接触过msp430芯片,更是没搞过这种芯片io口时序驱动层的东西,甚至纯c的都是头一次作为 ...

  2. 滑动窗口模板在字符串中的巧妙应用|LeetCode 76 最小覆盖子串

    LeetCode 76 最小覆盖子串 点此看全部题解 LeetCode必刷100题:一份来自面试官的算法地图(题解持续更新中) 更多干货,请关注公众号[忍者算法],回复[刷题清单]获取完整题解目录- ...

  3. CDN与前端技术

    本文分享自天翼云开发者社区<CDN与前端技术>,作者:张****亮 CDN(Content Delivery Network)是一种广泛应用于网络加速和内容分发的技术.它通过在全球各地部署 ...

  4. Markdown编辑环境搭建

    摘要:这篇文章主要介绍我本人搭建Markdown编辑环境的全过程,并记录下在这个过程中所遇到的问题及解决方法. 一.VS Code安装 进入VS Code官网:VS Code官网 然后根据自己的电脑下 ...

  5. flutter ios 深色模式下状态栏文字是白色的,白色背景下看不见

    flutter ios 深色模式下状态栏文字是白色的,白色背景下看不见 theme: ThemeData( appBarTheme: const AppBarTheme( systemOverlayS ...

  6. python基础-元组-集合-字典

    元组 概念 元组:由一系列变量组成的不可变序列容器 序列:支持索引和切片 不可变:1.没有增删改的方法 2.所有的操作都不会直接作用于原数据 定义 <span style="font- ...

  7. 开源一款串口舵机驱动扩展板-FreakStudio多米诺系列

    原文链接: FreakStudio的博客 摘要 总线舵机扩展板通过UART接口控制多个舵机,支持堆叠级联,最多连接4个扩展板.具备小尺寸设计.供电保护.全双工转半双工通信.稳定供电等特点,适用于多舵机 ...

  8. Math.atan2求角度解析

    我们求角度的时候, 第一反应应该是Math.tan(x/y)就得到角度了 但是这样求的是和y轴的夹角,如果以y轴正方向为0度,顺时针为正,则第三象限和第一象限的tan值一致,需要判断x,y和0的关系, ...

  9. redis - [07] 数据类型

      redis是一个开源(BSD许可)的,内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件MQ.它支持多种类型的数据结构,如字符串(String).散列(Hash).列表(List).集合( ...

  10. svn提示Node remains in conflict的解决办法

    svn 更新提示Node remains in conflict 这个时候不管svn up多少次,都无法更新到最新的内容 解决办法: svn revert --depth=infinity * 其中* ...