最近改了下之前用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. ORACLE存储过程中使用游标+BULK COLLECT的应用

    经过半天的折腾,编译通过调试结果正确,掌握此过程中的知识点,oracle存储过程编写就应用到了90%. CREATE OR REPLACE PROCEDURE JUNAN.P_IPT_QUOTN_IN ...

  2. Visual Studio各个版本密钥

    1.VS2012 旗舰版:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC 2.VS2013 旗舰版:BWG7X-J98B3-W34RT-33B3R-JVYW9 专业版:XDM3T-W3T3 ...

  3. 一款基于 WPF 开源、功能全面的串口调试工具

    前言 今天大姚给大家分享一款基于 WPF 开源(MIT License).免费.功能全面的串口调试工具:BYSerial. 项目介绍 BYSerial是一款基于 WPF 开源(MIT License) ...

  4. 流程控制之for循环练习画三角形

    package com.yeyue.struct; public class TestDemo { public static void main(String[] args) { //打印三角形 5 ...

  5. MacOS15+Xcode版本16+对ReactNative项目进行编译和上传到APPStore的踩坑记录

    作者:Kovli 重要通知:红宝书第5版2024年12月1日出炉了,感兴趣的可以去看看,https://u.jd.com/saQw1vP 红宝书第五版中文版 红宝书第五版英文原版pdf下载(访问密码: ...

  6. Ai 系列 —— DeepSeek 初步介绍

    DeepSeek 初步使用介绍 背景 Ai 正在慢慢在改变我们的生活,比如老一辈可能已经在用豆包(字节跳动推出的AI聊天机器人) 前端开发,某些公司内部已在使用图生文(设计稿生成前端代码) 网上也有许 ...

  7. 是否有必要使用 Oracle 向量数据库?

    向量数据库最主要的特点是让传统的只能基于具体值/关键字的数据检索,进化到了可以直接基于语义的数据检索.这在AI时代至关重要! 回到标题问题:是否有必要使用 Oracle 向量数据库? 这实际还要取决于 ...

  8. abaqus建模时突发意外,软件闪退怎么才能找回操作?

    abaqus/CAE 建模的时候可能经常由于各种各样的原因闪退(中断.卡住.未响应等等.) 这是很让人崩溃的时候,一个良好的习惯就是经常Ctrl+S,并且操作的时候不要太急,否则abaqus容易反应不 ...

  9. 腾讯云锐驰型轻量服务器搭建开源远程桌面软件RustDesk中继服务器小记

    RustDesk是一个基于Rust编写的全平台开源远程桌面软件,其最大的特点为开箱即用,且数据完全自主掌控,甚至可以依托此项目定制化开发自己专属的远程桌面软件. 一.前言 由于我个人经常性出差,对远程 ...

  10. es6 形参的陷阱

    先看代码: var x = 1; function s (a,y = function (){ x = 2 }){     var x = 1;     y();     console.log(x) ...