我在symfony 3中遇到了防火墙问题。三天以来,我一直在努力解决这个问题。我已经阅读了文档,并根据它做了所有事情,但应用程序并没有像我预期的那个样工作。
目标:所有页面(登录页面除外)都需要登录用户。如果用户未登录,则应将其重定向到/login页面。这就是全部。
根据这几页:
我已经创建了带有登录操作和表单的控制器。login_path和check_path使用相同的操作(根据留档)。可能security.yml出了问题,因为它不能正常工作。我的设置:
security:
providers:
in_memory:
memory:
users:
aaa:
password: aaa
roles: 'ROLE_ADMIN'
encoders:
Symfony\Component\Security\Core\User\User: plaintext
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login_firewall:
pattern: ^/login
anonymous: ~
# form_login:
# login_path: /login
# check_path: /login
secured_area:
pattern: ^/
form_login:
login_path: /login
check_path: /login
default_target_path: homepage
logout:
path: /logout
target: /login
# access_control:
# - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
# - { path: ^/, roles: IS_AUTHENTICATED_FULLY }
我的登录操作:
<?php
/**
* @Route("/login", name="login")
*/
public function loginAction(Request $request)
{
$authenticationUtils = $this->get('security.authentication_utils');
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render(
'security/login.html.twig',
array(
// last username entered by the user
'last_username' => $lastUsername,
'error' => $error,
)
);
}
?>
问题:
请帮帮我。我相信这很简单,但我在Symfony是新手,我看不到。
更新
多亏了Tobias Xy,我更正了security.yml。工作版本:
security:
providers:
in_memory:
memory:
users:
smt:
password: smt
roles: 'ROLE_ADMIN'
encoders:
Symfony\Component\Security\Core\User\User: plaintext
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: ~
form_login:
login_path: /login
check_path: /login
default_target_path: /
logout:
path: /logout
target: /login
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }
修复:
我建议:
让我知道它是否有效。
替代修复:
(这可能行得通,但我不是100%确定)。
一些解释:
您的问题可能可以通过以下页面来解释:如何构建传统的登录表单。上面写着:
如果您使用多个防火墙,并且针对一个防火墙进行身份验证,则不会自动针对任何其他防火墙进行身份验证。不同的防火墙就像不同的安全系统。
这解释了您的一些问题:如果您取消login_firewall中的form_login,您将仅向登录页面进行身份验证!一旦您转到另一个页面,您将不再进行身份验证,因为这是一个不同的安全上下文。
我不是100%确定你的问题1,但它可能会发生,因为你的“检查路径”也在防火墙登录防火墙后面,并且不安全。由于登录防火墙中没有表单登录,因此提交的登录表单将无法识别。
问题内容: 我确信你们中有人注意到,如果您有Acrobat Reader(或其他PDF阅读器),并在Firefox中打开一个PDF,您会看到它嵌入在您的标签中。有什么方法可以将应用程序嵌入JFrame中? 问题答案: 这是一个相当棘手的问题。通常,诸如Adobe Reader之类的本机应用程序不提供可以嵌入到swing应用程序中的组件。但是在Windows中,有COM / OLE方法可以将应用程序
本文向大家介绍symfony3 4.创建Symfony应用程序,包括了symfony3 4.创建Symfony应用程序的使用技巧和注意事项,需要的朋友参考一下 示例 Symfony Installer可用后,使用新命令创建第一个Symfony应用程序: 该命令可以在任何地方运行,而不必在htdocs文件夹中运行。 此命令将my_project_name/基于新的可用稳定Symfony版本创建一个名
我成功地安装了JProfiler远程探测,我看到它在“catalina.out”(Tomcat)中运行。唯一的问题是远程机器上的所有端口都有防火墙(80和8080除外),无论我选择哪个端口,JProfiler GUI都无法连接到远程探测。 我尝试使用PuTTY隧道,但我不确定如何设置隧道规则。此外,JProfiler中似乎没有“网络首选项”,我可以在其中指定SOCKS代理。 我如何在不影响防火墙规
我有一个java应用程序,它在运行时会产生另一个JVM。然而,我想使用jpack打包我的应用程序,它运行得很好。但是在运行时,当我的应用程序尝试使用调用下一个JVM时 我必须知道,应用程序是使用定制的JVM启动的,并且没有像“java”这样的命令。所以我得到的错误是这个java。无法执行getAbsolutePath()。 如果没有java可执行文件,我的应用程序如何在单独的进程中运行另一个jar
问题内容: 有什么方法可以配置多个工作进程和/或Web进程以在单个Heroku应用程序容器中运行?还是必须将其分解为多个Heroku应用程序? 例如: 问题答案: 所有进程必须具有唯一的名称。 此外,名称 和 无关紧要,没有特殊含义。 唯一带有重要名称的进程是该进程,如Heroku文档中所述: Web进程类型是特殊的,因为它是唯一将从Heroku路由器接收HTTP流量的进程类型。其他过程类型可以任
问题内容: 我读到每个应用程序都在自己的JVM中运行。为什么会这样呢?他们为什么不让一个JVM运行2个或更多应用程序? 我说的是通过公共静态void main(String [])方法启动的应用程序…) 问题答案: (我假设您正在谈论通过方法启动的应用程序…) 理论上,您可以在JVM中运行多个应用程序。实际上,它们可以以各种方式相互干扰。例如: JVM具有一组System.in/out/err,一