2017-06-05 1 views
0

Ich habe eine ähnliche Anforderung wie dieser Beitrag erwähnt. :REST spring security - Manually authenticating a new user and getting access tokenGrails Feder Sicherheits Rest inject tokenGenerator

die akzeptierte Antwort Laut werden die Codes wie:

class RegisterController { 

    def springSecurityService 
    def tokenGenerator 
    def tokenStorageService 

    def register() { 
     //do stuff 
     springSecurityService.reauthenticate(username) 
     String tokenValue = tokenGenerator.generateToken() 
     tokenStorageService.storeToken(tokenValue, springSecurityService.principal) 

     redirect url: "http://example.org/?access_token=${tokenValue}" 
    } 
} 

Ich habe versucht, aber es nicht für mich zu arbeiten. Es scheint, dass die TokenGenerator-Implementierungsklasse nicht richtig injiziert wurde. Ich verstehe die Standard-Implementierung in Grails-Spring-Sicherheit-Rest TokenGenerator wird der JWT sein, aber frage mich, wo sollte ich registrieren oder konfigurieren.

Antwort

1

Nun, wenn Sie die "tokenGenerator" verwenden möchten, dann müssen Sie es unter dem "resources.groovy" wie unter

// creating the bean of token generator 
tokenGenerator(SecureRandomTokenGenerator) 

registrieren und es dann in Ihrem Controller injizieren oder eine Dienstleistung wie unten

class RegisterController { 

def springSecurityService 
def tokenGenerator 
def tokenStorageService 

    def register() { 
     //do stuff 
     springSecurityService.reauthenticate(username) 
     String tokenValue = tokenGenerator.generateToken() 
     tokenStorageService.storeToken(tokenValue, springSecurityService.principal) 

     redirect url: "http://example.org/?access_token=${tokenValue}" 
    } 
} 

Ich habe folgte dem gleichen Beispiel (mit geringfügiger Änderung) und es funktioniert wie erwartet.

Ich habe die "userDetailsService" zum Erzeugen von Benutzerinstanz statt "springSecurityService.reauthenticate(username)"

Also meine Funktion sieht aus wie unten verwendet.

/** 
* For generating the access token for the user 
* 
* @param userName : Holds the username of the user 
* 
* @return : access token 
*/ 
String generateAccessToken(String userName){ 
    String tokenValue 

    try{ 
     //load user details 
     def userDetails = userDetailsService.loadUserByUsername(userName) 

     //generate access token 
     tokenValue = tokenGenerator.generateAccessToken(userDetails).accessToken 

     //store access token 
     tokenStorageService.storeToken(tokenValue, userDetails) 
    } catch (Exception e){ 
     //Exception handling code 
    } 

    return tokenValue 
} 
+0

danke ... Ich werde es versuchen –

+0

Ausgezeichnet! Es klappt. –

+0

Kann ich das gleiche mit 'tokenStorageService' machen? – lealceldeiro

Verwandte Themen