如何定制拒绝访问的反应呢

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.4,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

如何定制拒绝访问的反应呢

在Syob娱乐下载mfony中,可以抛出AccessDeniedException不允许访问用户。ob娱乐下载Symfony将处理这个异常并生成一个响应根据认证状态:

  • 如果用户未被认证身份验证入口点(或匿名身份验证),用于生成一个响应(通常是一个或一个重定向到登录页面401年未经授权反应);
  • 如果用户通过身份验证,但没有所需的权限,一个403年被禁止的反应生成。

自定义授权响应

您需要创建一个类实现AuthenticationEntryPointInterface。这个接口有一个方法(start ()),每当一个未经身份验证的用户试图访问受保护的资源:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29
/ / src /安全/ AuthenticationEntryPoint.php名称空间应用程序\安全;使用ob娱乐下载\组件\HttpFoundation\RedirectResponse;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\会话\SessionInterface;使用ob娱乐下载\组件\路由\发电机\UrlGeneratorInterface;使用ob娱乐下载\组件\安全\核心\异常\AuthenticationException;使用ob娱乐下载\组件\安全\Http\入口点\AuthenticationEntryPointInterface;AuthenticationEntryPoint实现了AuthenticationEntryPointInterface{私人美元urlGenerator;私人美元会话;公共函数__construct(UrlGeneratorInterface美元urlGenerator,SessionInterface美元会话){美元- >urlGenerator =美元urlGenerator;美元- >会话=美元会话;}公共函数开始(请求美元请求,AuthenticationException美元authException= null):RedirectResponse{/ /添加一个自定义的flash消息和重定向到登录页面美元- >会话- >getFlashBag ()- >add (“注意”,你必须登录以访问这个页面。);返回RedirectResponse (美元- >urlGenerator- >生成(“security_login”));}}

如果你使用的就是这样默认的服务。yaml的配置。否则,你必须注册这个服务的容器。

现在,配置该服务ID作为防火墙的入口点:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7
#配置/包/ security.yaml防火墙:#……主要:#……entry_point:App \安全\ AuthenticationEntryPoint

自定义禁止响应

创建一个类实现AccessDeniedHandlerInterface。这个接口定义了一个方法调用处理()你可以实现任何逻辑访问被拒绝时应执行当前用户(如发送邮件日志消息,或通常返回一个自定义响应):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src /安全/ AccessDeniedHandler.php名称空间应用程序\安全;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\安全\核心\异常\AccessDeniedException;使用ob娱乐下载\组件\安全\Http\授权\AccessDeniedHandlerInterface;AccessDeniedHandler实现了AccessDeniedHandlerInterface{公共函数处理(请求美元请求,AccessDeniedException美元accessDeniedException):哦?响应{/ /……返回响应(美元内容,403年);}}

如果你使用默认的服务。yaml的配置,你做的!ob娱乐下载Symfony会自动知道你的新服务。然后您可以配置它在你的防火墙:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7
#配置/包/ security.yaml防火墙:#……主要:#……access_denied_handler:App \安全\ AccessDeniedHandler

定制所有拒绝访问响应

在某些情况下,您可能想要定制响应或做一个特定的行动(如日志记录)AccessDeniedException。在这种情况下,配置一个内核。异常监听器:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35 36 37
/ / src / EventListener / AccessDeniedListener.php名称空间应用程序\EventListener;使用ob娱乐下载\组件\EventDispatcher\EventSubscriberInterface;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\HttpKernel\事件\ExceptionEvent;使用ob娱乐下载\组件\HttpKernel\KernelEvents;使用ob娱乐下载\组件\安全\核心\异常\AccessDeniedException;AccessDeniedListener实现了EventSubscriberInterface{公共静态函数getSubscribedEvents():数组{返回(/ /优先级必须大于安全HTTP/ / ExceptionListener,确保它叫做之前/ /默认异常监听器KernelEvents::异常= > [“onKernelException”,2]];}公共函数onKernelException(ExceptionEvent美元事件):无效{美元异常=美元事件- >getThrowable ();如果(!美元异常运算符AccessDeniedException) {返回;}/ /……执行一些操作(如日志记录)/ /可选设置自定义响应美元事件- >setResponse (响应(,403年));/ /或停止传播(防止下一个异常监听器被称为)/ / $事件- > stopPropagation ();}}
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。