Grails spring安全性rest注入令牌生成器

Grails spring安全性rest注入令牌生成器,grails,jwt,spring-security-rest,Grails,Jwt,Spring Security Rest,我有一个类似的要求,就像这篇文章提到的 根据公认的答案,代码如下: class RegisterController { def springSecurityService def tokenGenerator def tokenStorageService def register() { //do stuff springSecurityService.reauthenticate(username)

我有一个类似的要求,就像这篇文章提到的

根据公认的答案,代码如下:

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,但我想知道我应该在哪里注册或配置它。

如果你想使用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}"
    }
}
然后将其注入控制器或服务,如下所示

// 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.reauthenticateusername

我的函数如下所示

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

我可以对tokenStorageService执行同样的操作吗?是否有方法生成签名JWT?