如何在 grails 中使用会话

Posted

技术标签:

【中文标题】如何在 grails 中使用会话【英文标题】:how to use session in grails 【发布时间】:2013-06-27 13:37:45 【问题描述】:

我是 grails 的新手。我必须与会话一起工作。我看过会话文档。但不知道将代码放在我的控制器中的哪个位置。我有一个学生创建名称 createStudent 的页面。现在我希望这个页面只有在用户处于会话状态时才能访问。现在我该怎么做。我是否必须在登录时将用户设置为变量。有人可以帮我吗?

def index() 
    def user = session["user"]
    if (user)
        redirect(controller: 'admistratorAction', action: 'createUser')
    else
        redirect(controller: 'login', action: 'index')
    


【问题讨论】:

【参考方案1】:

您可以在控制器中使用session.getAttribute(key)session.setAttribute(key, value) 方法。或者,有一些插件,例如 Spring Security Core Plugin 已经很好地处理了这个问题。

Peter Led*** 为 Spring Security 插件 here 提供了一个很好的教程,插件文档链接到至少一个其他教程。

** 编辑 **

正如您所建议的,为了直接使用会话,需要在更早的时候在会话中设置用户。例如:

def setCurrentStudent() 
    def aStudent = [name: "Student1"]
    session["user"] = aStudent
    render "Added $aStudent to the session."

Spring Security 将在登录时自动执行此操作。然后,可以随时使用 springSecurityService 访问当前用户。

class SomeController 
   def springSecurityService
   def someAction = 
       def user = springSecurityService.currentUser
       …
   

【讨论】:

感谢您的回复。我已经在使用 Spring Security 核心插件。但我不知道如何从中使用会话。我在编辑器中给出了一个示例源代码。如果条件为假,它会重定向到登录页面。但如果为真,则不会重定向 createUser 页面。你现在能帮忙吗?! 我不确定我是否完全理解这个问题 - 为什么需要直接使用会话?我已经用一些代码 sn-ps 更新了我的答案。希望对您有所帮助。 感谢 @osborp 现在提供帮助。稍后我将处理会议的详细信息。但现在这是基本的答案 感谢您的回复。它对我有帮助!

以上是关于如何在 grails 中使用会话的主要内容,如果未能解决你的问题,请参考以下文章

在 Grails 中,如何访问域类静态方法中的休眠会话?

如何防止 Grails 3 创建会话?

在 grails 中维护会话

如何在Grails中使用自定义身份验证过滤器?

如何在 Grails 中使用 Spring Security 检查用户在线状态?

如何在 Grails 中实现超时页面