Grails spring安全休息注入tokenGenerator

时间:2017-06-05 15:11:56

标签: grails jwt spring-security-rest

我有类似的要求,就像这篇文章提到的那样。 :REST spring security - Manually authenticating a new user and getting access token

根据接受的答案,代码如下:

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 个答案:

答案 0 :(得分: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
}