【问题标题】:Grails spring security rest inject tokenGeneratorGrails spring security rest 注入 tokenGenerator
【发布时间】:2017-11-06 09:51:59
【问题描述】:

我有类似这篇文章提到的要求。 :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,但不知道我应该在哪里注册或配置它。

【问题讨论】:

    标签: grails jwt spring-security-rest


    【解决方案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
    }
    

    【讨论】:

    • 我可以对tokenStorageService做同样的事情吗?
    • 有没有办法生成签名的 JWT?
    猜你喜欢
    • 2019-05-09
    • 2015-05-04
    • 2014-11-02
    • 2015-09-19
    • 2016-05-24
    • 2015-06-13
    • 2015-12-19
    • 2016-07-14
    • 2017-06-25
    相关资源
    最近更新 更多