2013-06-30 15 views
8

Jestem nowy dla grails. I muszę pracować z sesją. Widziałem dokumentację sesji. Ale nie mam pojęcia, gdzie umieścić kod w moim kontrolerze. Mam stronę z nazwiskami studentów do tworzenia createStudent. Teraz chcę, aby ta strona była dostępna tylko wtedy, gdy użytkownik będzie w sesji. Jak mogę to zrobić? Czy muszę ustawić użytkownika w zmiennej w momencie logowania. Czy ktoś może mi w tym pomóc?jak używać sesji w grails

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

} 

Odpowiedz

12

można użyć session.getAttribute(key) i session.setAttribute(key, value) metod wewnątrz sterownika. Alternatywnie istnieją wtyczki, takie jak Spring Security Core Plugin, które radzą sobie z tym bardzo dobrze.

Istnieje dobry samouczek autorstwa Petera Ledbrooka dla wtyczki Spring Security here, a dokumentacja wtyczki łączy się z co najmniej jednym innym samouczkiem.

** Edycja **

Jak zasugerował, żeby wykorzystać sesję bezpośrednio użytkownik musiałby być ustawiony w sesji na wcześniejszym punkcie. Na przykład:

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

Spring Security zrobi to automatycznie przy logowaniu. Następnie dostęp do bieżącego użytkownika można uzyskać w dowolnym momencie za pomocą usługi springSecurityService.

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

dzięki za odpowiedź. Korzystam już z wtyczki rdzeń bezpieczeństwa sprężynowego. Ale nie wiem, jak używać tej sesji. Podam przykładowy kod źródłowy w edytorze. Przekierowuje do strony logowania, jeśli warunek jest fałszywy. ale nie przekierowuje strony createUser, jeśli ma wartość true. Czy możesz teraz pomóc?! –

+0

Nie jestem pewien, czy całkowicie rozumiem problem - dlaczego musisz korzystać z sesji bezpośrednio? Zaktualizowałem swoją odpowiedź za pomocą fragmentów kodu. Mam nadzieję, że to pomoże. – osborp

+0

dzięki @osborp to pomaga na teraz. Będę pracował nad szczegółami sesji później. Ale teraz jest to odpowiedź na podstawowe –