感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
使用Security组件时,你可以创建“匹配了特定请求选项”的防火墙。多数情况下,仅匹配URL就可够了,但在特殊情况下,你需要“针对请求的其他选项”来进一步限制防火墙的初始化。
你可以单独使用任何一个限制条件,或者将其混用,来得到你想要的防火墙配置。
这是默认的制约和限制方式,如果请求URL和配置的pattern
相匹配,那么防火墙被初始化。
1 2 3 4 5 6 7 8 | # app/config/security.yml
# ...
security:
firewalls:
secured_area:
pattern: ^/admin
# ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- app/config/security.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<srv:container xmlns="http://symfony.com/schema/dic/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
<config>
<!-- ... -->
<firewall name="secured_area" pattern="^/admin">
<!-- ... -->
</firewall>
</config>
</srv:container> |
pattern
是一个正则表达式。本例中,如果URL以 /admin
为开始(因为 ^
正则字符),防火墙将被激活。如果URL不匹配此pattern,防火墙就不会被激活,在它后面的防火墙将有机会来匹配这一请求。
如果仅匹配 pattern
还不够的话,请求也可以针对 host
进行匹配。当配置选项中的 host
被设置,防火墙将为限制为仅在“请求中的主机名与配置信息相匹配”时才初始化。
1 2 3 4 5 6 7 8 | # app/config/security.yml
# ...
security:
firewalls:
secured_area:
host: ^admin\.example\.com$
# ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- app/config/security.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<srv:container xmlns="http://symfony.com/schema/dic/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
<config>
<!-- ... -->
<firewall name="secured_area" host="^admin\.example\.com$">
<!-- ... -->
</firewall>
</config>
</srv:container> |
host
(类似于pattern
)是正则表达式。本例中,如果主机名完全符合 admin.example.com
(因 ^
和$
正则字符),防火墙将被激活。如果主机名不匹配此条件,防火墙不会被激活,后面的防火墙将有机会来匹配这一请求。
配置信息中的 methods
选项,根据所提供HTTP方法来,来限制防火墙的初始化。
1 2 3 4 5 6 7 8 | # app/config/security.yml
# ...
security:
firewalls:
secured_area:
methods: [GET, POST]
# ... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- app/config/security.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<srv:container xmlns="http://symfony.com/schema/dic/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
<config>
<!-- ... -->
<firewall name="secured_area" methods="GET,POST">
<!-- ... -->
</firewall>
</config>
</srv:container> |
本例中,仅当请求中的HTTP方法是 GET
或 POST
,防火墙才被激活。如果请求的方法不在允许方法的数组中,则防火墙不会被激活,后面的防火墙将有机会来匹配这一请求。
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。