2017-06-05 92 views
0

我有類似的要求,像這篇文章提到。 :REST spring security - Manually authenticating a new user and getting access tokenGrails彈簧安全休息注入令牌發生器

根據公認的答案,該代碼將是這樣的:

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

我試過,但它並沒有爲我工作。看起來TokenGenerator實現類不是正確注入的。我理解在grails-spring-security-rest中的默認實現TokenGenerator將是JWT,但不知道我應該在哪裏註冊或配置它。

回答

1

那麼,如果你想使用"tokenGenerator"那麼你需要註冊它下"resources.groovy"像下面

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

,然後將其注入到您的控制器或服務類似下面

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

我有遵循相同的例子(稍作修改),並按預期工作。

我已經使用了"userDetailsService"生成用戶實例,而不是"springSecurityService.reauthenticate(username)"

所以我的函數看起來像下面。

/** 
* 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

謝謝...我會試一試 –

+0

非常好!有用。 –

+0

我可以用'tokenStorageService'做同樣的事嗎? – lealceldeiro