@Security 注释的自定义消息

Posted

技术标签:

【中文标题】@Security 注释的自定义消息【英文标题】:Custom message for @Security annotation 【发布时间】:2014-08-11 06:11:23 【问题描述】:

我正在尝试为我的路线使用@Security 注释。像这样:

/**
 * @return Response
 * @Route("/action")
 * @Security("has_role('ROLE_USER')")
 * @Template()
 */
public function someAction()

    return array();

当安全限制引发异常时,我收到消息Expression "has_role('ROLE_USER')" denied access

向最终用户显示这是不可接受的,因此我正在尝试找到一种方法来自定义注释消息。

简单的解决方法是不使用@Secutity 注释并编写如下代码:

/**
 * @return Response
 * @Route("/action")
 * 
 * @Template()
 */
public function someAction()

    if (!$this->get('security.context')->isGranted('ROLE_USER')) 
        throw new AccessDeniedException('You have to be logged in in order to use this feature');
    

    return array();

但这不太方便,可读性也较差。

是否可以将自定义消息写入@Security 注释?

【问题讨论】:

【参考方案1】:

一旦我意识到这是不可能的,我就向Sensio FrameworkExtra Bundle 发送了pull request 以使这成为可能。

此 PR 允许通过指定消息参数来自定义显示的消息,例如

@Security("has_role('ROLE_USER')",message="You have to be logged in")

【讨论】:

那你为什么要关闭 PR?这是一个很好的,关闭后仍然收到支持。请考虑重新打开它。 嗯,实际上是因为一年过去了,没有任何维护者发表评论,但是 PR 不同步,我看不出维护它的目的。

以上是关于@Security 注释的自定义消息的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Security 中显示自定义错误消息?

MFC的自定义消息的定义与使用

Mongoose 的自定义错误消息

Spring Security 自定义 AuthenticationException 消息

Laravel Spark 中的自定义验证消息

带有 HTTPStatusCodeResult 和 jQuery 的自定义错误消息