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?