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 ...
随机推荐
- ORACLE存储过程中使用游标+BULK COLLECT的应用
经过半天的折腾,编译通过调试结果正确,掌握此过程中的知识点,oracle存储过程编写就应用到了90%. CREATE OR REPLACE PROCEDURE JUNAN.P_IPT_QUOTN_IN ...
- Visual Studio各个版本密钥
1.VS2012 旗舰版:YKCW6-BPFPF-BT8C9-7DCTH-QXGWC 2.VS2013 旗舰版:BWG7X-J98B3-W34RT-33B3R-JVYW9 专业版:XDM3T-W3T3 ...
- 一款基于 WPF 开源、功能全面的串口调试工具
前言 今天大姚给大家分享一款基于 WPF 开源(MIT License).免费.功能全面的串口调试工具:BYSerial. 项目介绍 BYSerial是一款基于 WPF 开源(MIT License) ...
- 流程控制之for循环练习画三角形
package com.yeyue.struct; public class TestDemo { public static void main(String[] args) { //打印三角形 5 ...
- MacOS15+Xcode版本16+对ReactNative项目进行编译和上传到APPStore的踩坑记录
作者:Kovli 重要通知:红宝书第5版2024年12月1日出炉了,感兴趣的可以去看看,https://u.jd.com/saQw1vP 红宝书第五版中文版 红宝书第五版英文原版pdf下载(访问密码: ...
- Ai 系列 —— DeepSeek 初步介绍
DeepSeek 初步使用介绍 背景 Ai 正在慢慢在改变我们的生活,比如老一辈可能已经在用豆包(字节跳动推出的AI聊天机器人) 前端开发,某些公司内部已在使用图生文(设计稿生成前端代码) 网上也有许 ...
- 是否有必要使用 Oracle 向量数据库?
向量数据库最主要的特点是让传统的只能基于具体值/关键字的数据检索,进化到了可以直接基于语义的数据检索.这在AI时代至关重要! 回到标题问题:是否有必要使用 Oracle 向量数据库? 这实际还要取决于 ...
- abaqus建模时突发意外,软件闪退怎么才能找回操作?
abaqus/CAE 建模的时候可能经常由于各种各样的原因闪退(中断.卡住.未响应等等.) 这是很让人崩溃的时候,一个良好的习惯就是经常Ctrl+S,并且操作的时候不要太急,否则abaqus容易反应不 ...
- 腾讯云锐驰型轻量服务器搭建开源远程桌面软件RustDesk中继服务器小记
RustDesk是一个基于Rust编写的全平台开源远程桌面软件,其最大的特点为开箱即用,且数据完全自主掌控,甚至可以依托此项目定制化开发自己专属的远程桌面软件. 一.前言 由于我个人经常性出差,对远程 ...
- es6 形参的陷阱
先看代码: var x = 1; function s (a,y = function (){ x = 2 }){ var x = 1; y(); console.log(x) ...