0

我有类似这篇文章提到的要求。:REST spring security - 手动验证新用户并获取访问令牌

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

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

4

1 回答 1

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
}
于 2017-06-06T03:29:26.143 回答