9

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

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

}
4

1 回答 1

14

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

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

** 编辑 **

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

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
       …
   }
}
于 2013-06-30T06:44:02.453 回答