2009-04-21 15 views

Odpowiedz

10

używam 0.5.1 oraz następujące prace dla mnie:

class EventController { 
    def authenticateService 

    def list = { 
    def user = authenticateService.principal() 
    def username = user?.getUsername() 
    ..... 
    ..... 
    } 
} 
+0

Wielkie dzięki! Tylko literówka w powyższym kodzie. Powinien to być def username = user? .getUsername() –

+0

Dzięki za złapanie tego, poprawiłem to. –

+3

Uwaga: wprowadzono kilka zmian w nowej wersji Spring Security. [Zobacz tutaj przykład kodu Spring Security w wersji 1.1.2] (http://stackoverflow.com/questions/775053/grails-and-spring-security-how-do-i-get-the-authenticated-user-from -within-a-con/6270545 # 6270545) – Chris

15

Obecnie nie udokumentowane, ale w pliku instalacyjnego wtyczki, są 3 sposoby, które dodaje się do każdego kontrolera, dzięki czemu faktycznie nie trzeba wstrzyknąć authenticationService:

private void addControllerMethods(MetaClass mc) { 
    mc.getAuthUserDomain = { 
     def principal = SCH.context?.authentication?.principal 
     if (principal != null && principal != 'anonymousUser') { 
      return principal?.domainClass 
     } 

     return null 
    } 

    mc.getPrincipalInfo = { 
     return SCH.context?.authentication?.principal 
    } 

    mc.isUserLogon = { 
     def principal = SCH.context?.authentication?.principal 
     return principal != null && principal != 'anonymousUser' 
    } 
} 

oznacza to, że można po prostu zadzwonić

principalInfo 

Aby uzyskać główny obiekt. Ma również "isUserLogin", aby sprawdzić, czy użytkownik jest zalogowany i "authUserDomain", aby uzyskać rzeczywistą instancję klasy domeny (osoba/użytkownik) powiązaną z głównym użytkownikiem zalogowanego użytkownika.

+0

Świetne informacje, dzięki za napiwek. –

+0

Spędziłem półtorej godziny waląc głową w klawiaturę, próbując podłączyć wtyczkę Acegi do wzorca ładowania plików widocznego na http://www.packtpub.com/article/file-sharing-in-grails, dopóki nie znalazłem to. Dzięki! –

+4

Teraz metoda getPrincipalInfo nazywa się getAuthenticateduser, ale dzięki za dobrą wskazówkę! – lucke84

13

Następujący kod jest z Spring Security Core Plugin (Version: 1.1.2) - Reference Documentation - Section 6.2

grails.plugins.springsecurity.SpringSecurityService dostarcza użytecznych funkcji bezpieczeństwa. Jest to usługa regularne Grails, więc użyć Dependency Injection wstrzyknąć go do kontrolera, usług TagLib, i tak dalej:

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

Dziś myślę, że sposób to zrobić jest:

def user = getAuthenticatedUser() 
2

można uzyskać bieżącego użytkownika w ten sposób także

class AnyController { 
    def springSecurityService 
    def someAction = { 
    def user = User.get(springSecurityService.principal.id) 

    } 
} 
0

użyć tego kodu:

if (springSecurityService.isLoggedIn()){ 
     println "Logged In" 

    } 
Powiązane problemy