从Symfony2.3安全文档:
如果访问被拒绝, 则系统将尝试对用户进行身份验证(如果尚未进行身份验证)(例如,将用户重定向到登录页面)
。如果用户已经登录,将显示403“访问被拒绝”错误页面。有关更多信息,请参见如何自定义错误页面。
我目前access_control
在一条路线上使用一条规则。如果匿名用户被重定向到登录路由,我想通过一条消息“ 您必须登录才能访问该页面 ”
来通知他们。我已经阅读了几次安全性文档,但没有发现与此相关的任何内容。我在俯视什么吗?
如果不是,那么 仅* 当用户被重定向到登录时(即,如果他们只是 未经授权的角色 就不会), 才有
一条最好的方式通知用户何时被access_control
规则停止? * __
编辑: 为澄清起见,我专门问如何检查重定向是否是由access_control
规则引起的(如果可能,最好在树枝中)。
因此,经过大量研究,我找到了正确的方法。您需要使用入口点服务,并在防火墙配置中对其进行定义。
此方法 不会
与您在防火墙配置中指定的用于登录的默认页面设置混淆。
security.yml:
firewalls:
main:
entry_point: entry_point.user_login #or whatever you name your service
pattern: ^/
form_login:
# ...
src / Acme / UserBundle / config / services.yml
services:
entry_point.user_login:
class: Acme\UserBundle\Service\LoginEntryPoint
arguments: [ @router ] #I am going to use this for URL generation since I will be redirecting in my service
src / Acme / UserBundle / Service / LoginEntryPoint.php:
namespace Acme\UserBundle\Service;
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface,
Symfony\Component\Security\Core\Exception\AuthenticationException,
Symfony\Component\HttpFoundation\Request,
Symfony\Component\HttpFoundation\RedirectResponse;
/**
* When the user is not authenticated at all (i.e. when the security context has no token yet),
* the firewall's entry point will be called to start() the authentication process.
*/
class LoginEntryPoint implements AuthenticationEntryPointInterface
{
protected $router;
public function __construct($router)
{
$this->router = $router;
}
/*
* This method receives the current Request object and the exception by which the exception
* listener was triggered.
*
* The method should return a Response object
*/
public function start(Request $request, AuthenticationException $authException = null)
{
$session = $request->getSession();
// I am choosing to set a FlashBag message with my own custom message.
// Alternatively, you could use AuthenticationException's generic message
// by calling $authException->getMessage()
$session->getFlashBag()->add('warning', 'You must be logged in to access that page');
return new RedirectResponse($this->router->generate('login'));
}
}
login.html.twig:
{# bootstrap ready for your convenience ;] #}
{% if app.session.flashbag.has('warning') %}
{% for flashMessage in app.session.flashbag.get('warning') %}
<div class="alert alert-warning">
<button type="button" class="close" data-dismiss="alert">×</button>
{{ flashMessage }}
</div>
{% endfor %}
{% endif %}
问题内容: 我是React Router的新手,并了解到重定向页面的方法有很多: 使用 使用 在React Router v4中,有和。 我对所有这些选项感到困惑,是否有最佳的方法来重定向页面? 问题答案: 实际上,这取决于您的用例。 1)您想保护您的路线免受未经授权的用户的侵害 如果是这种情况,则可以使用称为的组件,并可以实现以下逻辑: 请记住,如果您想按预期的方式工作,则应将其放在组件的ren
问题内容: 任何人都可以建议我使用以下两种方法中使用REST重定向URL的最佳方法: 问题答案: 重定向有多种形式。该HTTP状态代码系列包含: 这些和其他代码具有不同的语义。正确的选择取决于您的情况。资源是否已永久移动到新位置?还是重定向只是临时的?
问题内容: 我正在用德语建立一个网站,所以我将使用诸如此类的字符,那么您有什么建议? 问题答案: 这个答案已经过时了。有关表情符号的完整支持,请参见此答案。 作为字符集,如果可以的话,绝对是UTF-8。 作为排序规则- 对于具有特殊字符的语言来说有点讨厌。有各种类型的排序规则。他们都可以存储所有Umlauts和其他角色,但是它们在比较中如何对待Umlauts有所不同,即是否 是对还是错;和排序(U
问题内容: 困难在于它应该是跨平台的。Windows 2000,XP,Vista,OSX,Linux和其他Unix变体。我正在寻找可以针对所有平台完成此操作的代码片段,以及一种检测平台的方法。 现在,你应该知道的错误4787931是不能正常工作,所以请不要为我提供教科书的答案,我可以在手册中找到这些我自己。 问题答案: 你引用的错误(错误4787391)已在Java 8中修复。即使你使用的Java
我是React Router的新手,我了解到有很多方法可以重定向页面: 在React Router v4中,有和。详细说明:如何在React路由器V4中推到历史? 我被所有这些选项弄糊涂了,有没有一个最好的方法来重定向一个页面?
我的问题是,对于应用程序的管理员来说,跟踪异常的最佳方法是什么。(出于维护目的,通知管理员抛出的异常)。 对于系统的用户,我认为应该捕捉异常并显示适当的错误信息。我认为,要管理系统,最好的方法是有一个消息传递系统,将每个异常的细节作为消息发送给接收者。一旦接收方收到新的错误消息,将其保存在数据库中,或者ping管理员一封包含异常详细信息的电子邮件。