2010-11-15 159 views
2

我正在使用Grails Spring Security Core Plugin来使用以下注释来确保某个操作的安全。Grails Spring Security Core Plugin - 向登录页面添加Flash消息

@Secured(['IS_AUTHENTICATED_REMEMBERED']) 

这会导致重定向到我的登录页面,如果用户没有登录的操作。一旦他们登录然后它们重定向到原来的动作。

我怎么能在这种情况下添加Flash消息到登录页面,即

flash.message = "You must be logged in to submit a news story" 

为了澄清,我只是想显示的消息,如果用户试图后重定向到登录页面访问此特定操作。其他操作不会触发该消息。

回答

3

我已经解决了这个如下。

  1. 远离操作的注释。
  2. 在动作开始时添加以下代码(新闻并分别作为相关控制器和动作提交)。

    if (!springSecurityService.isLoggedIn()) { 
        flash.message = "You must be logged in to submit a news story." 
        redirect(controller:"login", action: "auth", params:["spring-security-redirect" : "/news/submit"]) 
    } 
    
  3. 将以下内容添加到登录表单中。

    <input type='hidden' name='spring-security-redirect' value='${params['spring-security-redirect']}'/> 
    
+0

良好的解决方法。能够在注释中做到这一点是很好的,看起来像是一个非常常见的用例 – Peter 2012-01-09 23:45:09

2

添加,例如,这对您的登录视图:

<sec:noAccess url="/admin/listUsers"> 
    You must be logged in to view the list of users. 
</sec:noAccess> 

security taglib's documentation

+0

谢谢。但是,这不会像我所需要的那样工作,因为如果用户尝试访问特定操作,我只希望显示该消息。我已经重新提出了我的问题来澄清这一点,因为我可以看到它不明确。 – William 2010-11-15 17:12:16

相关问题