2013-06-30 11 views
8

Ich bin neu zu Grals. Und ich muss mit der Sitzung arbeiten. Ich habe die Sitzungsdokumentation gesehen. Aber keine Ahnung, wo ich den Code in meinen Controller legen sollte. Ich habe eine Seite für die Erstellung von Studenten createStudent. Jetzt möchte ich, dass diese Seite nur zugänglich ist, wenn der Benutzer in Sitzung ist. Jetzt, wie kann ich es tun. Muss ich den Benutzer zum Zeitpunkt der Anmeldung in eine Variable setzen? Kann mir bitte jemand dabei helfen?wie man Sitzung in Grails verwendet

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

} 

Antwort

12

könnten Sie verwenden die session.getAttribute(key) und session.setAttribute(key, value) Methoden in Ihrem Controller. Alternativ gibt es Plugins wie die Spring Security Core Plugin, die das schon sehr gut handhaben.

Es gibt ein gutes Tutorial von Peter Ledbrook für das Spring Security Plugin here und die Plugin Dokumentation Links zu mindestens einem anderen Tutorial.

** ** Bearbeiten

Wie Sie vorgeschlagen, um die Sitzung zu verwenden, um direkt die Benutzer in der Sitzung zu einem frühen Zeitpunkt festgelegt werden müßten. Zum Beispiel:

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

Spring Security wird dies automatisch bei der Anmeldung tun. Dann kann der aktuelle Benutzer jederzeit mit dem springSecurityService aufgerufen werden.

class SomeController { 
    def springSecurityService 
    def someAction = { 
     def user = springSecurityService.currentUser 
     … 
    } 
} 
+0

danke für Ihre Antwort. Ich benutze bereits Spring Security Core Plugin. Aber ich weiß nicht, wie man Sitzung davon benutzt. Ich gebe einen Beispielquellcode im Herausgeber. Es wird zur Anmeldeseite umgeleitet, wenn die Bedingung falsch ist. CreateUser-Seite wird jedoch nicht umgeleitet, wenn sie wahr ist. Kannst du jetzt helfen? –

+0

Ich bin mir nicht sicher, ob ich das Problem vollständig verstehe - warum müssen Sie die Sitzung direkt verwenden? Ich habe meine Antwort mit einigen Code-Snippets aktualisiert. Ich hoffe es hilft. – osborp

+0

danke @osborp es hilft für jetzt. Ich werde später an Details der Sitzung arbeiten. Aber im Moment ist dies die Antwort für die grundlegende –