12 Stimmen

Grails und Spring Security: Wie erhalte ich den authentifizierten Benutzer aus einem Controller?

Ich bin kürzlich vom JSecurity-Plugin zu Spring Security gewechselt. Wie bekomme ich den authentifizierten Benutzer aus meinen Controllern?

15voto

Ted Naleid Punkte 25891

Es ist derzeit nicht dokumentiert, aber in der Plugin-Installationsdatei gibt es 3 Methoden, die es zu jedem Controller hinzufügt, so dass Sie nicht wirklich den authenticationService injizieren müssen:

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'
    }
}

Das heißt, Sie können einfach

principalInfo

Um das Hauptobjekt zu erhalten. Außerdem gibt es "isUserLogin", um festzustellen, ob der Benutzer angemeldet ist, und "authUserDomain", um die tatsächliche Domänenklasseninstanz (die Person/Benutzer) zu erhalten, die mit dem Hauptobjekt des angemeldeten Benutzers verbunden ist.

13voto

Chris Punkte 3512

Der folgende Code stammt aus der Spring Security Core Plugin (Version: 1.1.2) - Referenzdokumentation - Abschnitt 6.2

grails.plugins.springsecurity.SpringSecurityService stellt Sicherheitsfunktionen zur Verfügung. Es ist ein regulärer Grails Service, also benutzt man Dependency Injection um es in einen Controller, Service, Taglib, und so weiter zu injizieren:

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

10voto

John Wagenleitner Punkte 10749

Ich verwende 0.5.1 und das Folgende funktioniert bei mir:

class EventController {
  def authenticateService

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

5voto

chelder Punkte 3541

Heutzutage sollte man das meiner Meinung nach so machen:

def user = getAuthenticatedUser()

2voto

Free-Minded Punkte 5127

Sie können den aktuellen Benutzer auch auf diese Weise erhalten

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

     } 
 }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X