zif*_*ech 1 grails spring-security-rest
我想将用户ID字段添加到从/ api/login返回的令牌
目前它是:
{
"username": "user",
"roles": [
"ROLE_USER"
],
"token_type": "Bearer",
"access_token": "eyJhbGciOiJIUzI1NiJ9.2uk2YoHsyd7bqUdtUYN19ef..",
"expires_in": 3600,
"refresh_token": "eyJhbGciOiJIUzI1NiJ9.eyJwcmluY2lwYWwiOiJINH.."
}
Run Code Online (Sandbox Code Playgroud)
我需要:
{
"id": "1",
"username": "user",
"roles": [
"ROLE_USER"
],
"token_type": "Bearer",
"access_token": "eyJhbGciOiJIUzI1NiJ9.2uk2YoHsyd7bqUdtUYN19ef..",
"expires_in": 3600,
"refresh_token": "eyJhbGciOiJIUzI1NiJ9.eyJwcmluY2lwYWwiOiJINH.."
}
Run Code Online (Sandbox Code Playgroud)
目标 - 具有用户ID的查询,如POST/api/something有没有其他方法?提前致谢
你没有提到Grails版本,所以我发布了我为Grails 2.4.4实现的答案
您需要AccessTokenJsonRenderer在src/groovy下面创建的自定义类中实现接口的第一件事.
import grails.plugin.springsecurity.SpringSecurityUtils
import grails.plugin.springsecurity.rest.token.AccessToken
import grails.plugin.springsecurity.rest.token.rendering.AccessTokenJsonRenderer
import groovy.json.JsonBuilder
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.security.core.GrantedAuthority
/**
* Created by Prakash Thete on 17/04/2018
*/
class CustomAppRestAuthTokenJsonRenderer implements AccessTokenJsonRenderer {
@Override
String generateJson(AccessToken accessToken){
// Add extra custom parameters if you want in this map to be rendered in login response
Map response = [
id : accessToken.principal.id,
username : accessToken.principal.username,
access_token : accessToken.accessToken,
token_type : "Bearer",
refresh_token: accessToken.refreshToken,
roles : accessToken.authorities.collect { GrantedAuthority role -> role.authority }
]
return new JsonBuilder( response ).toPrettyString()
}
}
Run Code Online (Sandbox Code Playgroud)
你需要创建自定义类的bean的第二件事resources.groovy,如下所示
// For overriding the token json renderer
accessTokenJsonRenderer(CustomAppRestAuthTokenJsonRenderer)
Run Code Online (Sandbox Code Playgroud)
在点击之后,api/login您将收到用户的ID以及其他详细信息.
希望这可以帮助 !
| 归档时间: |
|
| 查看次数: |
596 次 |
| 最近记录: |