symfony框架安全组件(security)防火墙配置
最近改了下之前用symfony做的项目,然后,突然发现防火墙失效了,简单说就是再未登录状态下居然可以访问配置了ROLE_USER、ROLE_ADMIN这些权限的路由,symfony框架很强大,但是文档太拉跨,尤其关于防火墙配置这块真的就是说了个屁。由于时间过的太久,一些防火墙配置的关键特性忘记了,排查解决这个问题花了1天时间、郁闷,做个笔记吧,避免下次再忘。。。
symfony的安全组件名为 symfony/security-bundle,一般创建项目后就已经有了,也可以单独composer require;
配置
配置文件:
# config/packages/security.yaml
安全组件配置的几个关键特性:
- providers 用户提供者(至少有一个)一般为用户实体
- firewalls 防火墙(可以有多个,通过firewalls.pattern属性里的正则匹配路由)
- guard.authenticators 路由守卫/身份验证程序(一个服务名)
- 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框架安全组件(security)防火墙配置的更多相关文章
- Vue 框架-11-介绍src文件流程及根组件app+HBuilder 配置
Vue 框架-11-介绍src文件流程及根组件app+HBuilder 配置 这是上一篇对目录简单介绍: 关于编辑器,可以使用轻量级的 Sublime Text 3,我使用的是 HBuilder, 但 ...
- Linux防火墙配置与管理(16)
防火墙指的是一个由软件和硬件设备组合而成.在内部网和外部网之间.专用网与公共网之间的边界上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intra ...
- Symfony 框架实战教程——第一天:创建项目(转)
这个系列的实战博客真是太有用了,很多例子自己调试也是通的,不同于很多网上不同的实战例子...附上原文地址 https://www.chrisyue.com/symfony-in-action-day ...
- Security命名空间配置
http://www.mossle.com/docs/springsecurity3/html/ns-config.html Security命名空间配置 2.1. 介绍 从Spring-2.0开始可 ...
- Spring mvc Security安全配置
Spring Security笔记:自定义Login/Logout Filter.AuthenticationProvider.AuthenticationToken SPRING SECURITY ...
- 6. Samba服务和防火墙配置笔记
Samba文件服务器 (一)简介 内网文件服务器 windows-windows 文件共享服务 网络邻居linux-linux NFS windows-linux Samba (二)端口 smbd: ...
- setup 命令中防火墙配置选项无法打开
故障提示 1.1 如何让setup 命令中防火墙配置生效 1.1.1 CentOS系统找不到setup命令工具的解决方法 yum -y install setuptool #安装setup命令工具 y ...
- Spring Security 入门(1-2)Spring Security - 从 配置例子例子 开始我们的学习历程
1.Spring Security 的配置文件 我们需要为 Spring Security 专门建立一个 Spring 的配置文件,该文件就专门用来作为 Spring Security 的配置. &l ...
- 迷你MVVM框架 avalonjs 组件编写指南
avalon经过半年的宣传,已经有不少公司在使用avalon应用于它们内外网应用或移动项目,比较大牌的客户有百度,搜狐,金山,边缘,去哪儿--最近成为去哪儿的前端架构师后,掌握更多资源,可以随使抓个人 ...
- Django之REST_framework 框架基本组件使用
快速实例 快速实例: 点击查看官方文档 阅读推荐:点击查看 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如j ...
随机推荐
- dart安装教程详解
官网 https://dart.dev 关于发布通道和版本字符串 Dart SDK有三个发布通道: 1==>:稳定释放,大约每三个月更新一次: 稳定释放适合生产使用. 2==>:预览发布, ...
- Java03-程序流程控制
Java程序流程控制 [ 任务列表 ] 1.选择结构(if.switch) 2.循环结构(for.while.do-while) 3.跳转关键字(break.continue.return) 4.其他 ...
- springboot logger 的配置
1.dev(开发环境)中logger配置详解 <!-- 文件输出格式 --> <property name="PATTERN" value="% ...
- 解决使用PowerShell执行命令出现“因为在此系统上禁止运行脚本”的问题
1.问题描述 出现的具体错误如下所示: 2.解决办法 以管理员身份运行PowerShell,执行命令get-executionpolicy可查看PowerShell执行的策略(Restricted代表 ...
- Luogu P3041 USACO12JAN Video Game G 题解 [ 紫 ] [ AC 自动机 ] [ 动态规划 ]
Video Games G:弱智紫题,30min 切了,dp 思路非常板. 多模式串一看肯定就是要建出 AC 自动机,然后在 fail 树里下传标记,预处理每个节点到达后的得分. 然后设计 \(dp_ ...
- 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
前言 腾讯元宝AI产品于2025年2月13日在应用商店发布更新,正式接入了DeepSeek R1模型,并宣布该模型已联网.满血上线,DeepSeek+腾讯混元,好用不卡机. 腾讯元宝介绍 腾讯元宝是依 ...
- YASKAWA安川DX100控制柜维修看这几步
维修YASKAWA安川DX100控制柜需要综合运用多种诊断技巧,并遵循严格的安全操作规程.通过预防性维护和及时的故障处理,可以显著提高DX100控制柜的可靠性和使用寿命,从而保障企业生产线的稳定运行. ...
- Java中编译期异常和运行期异常的区别
在Java中,异常分为运行期异常(Runtime Exception)和编译期异常(Checked Exception),两者的核心区别在于 编译器是否强制要求处理.以下是它们的详细对比: 1. 定义 ...
- Python - [03] 基础语法
题记部分 一.标识符 第一个字符必须是字母表中字母或下划线_ 标识符的其他部分由字母.数字和下划线组成 标识符对大小写敏感 二.Python保留字 三.注释 (1)单行注释:以#开头 #!/usr/b ...
- Educational Codeforces Round 175 (Rated for Div. 2) 比赛记录
Educational Codeforces Round 175 (Rated for Div. 2) 比赛记录 比赛连接 手速场,上蓝场,但是有点唐,C 想错了写了半个多小时,想到正解不到 \(10 ...