使用 grails spring security rest 插件登录时获取用户详细信息

Posted

技术标签:

【中文标题】使用 grails spring security rest 插件登录时获取用户详细信息【英文标题】:Get user details when login using grails spring security rest plugin 【发布时间】:2016-03-27 05:39:32 【问题描述】:

我正在使用 grails spring 安全插件。当我登录时,我将用户名、令牌和角色作为 json 响应。除了这些属性,我还想获取一些其他属性,例如名字、姓氏等。使用 grails spring security rest 插件登录应用程序时,如何将这些值作为 json 响应获取?

【问题讨论】:

据我所知,您需要使用用户详细信息向令牌添加声明,您可以使用springSecurityService?.currentUser,并从那里获取用户详细信息 在登录时我想获取详细信息而不是再次请求登录用户 @Jagadeesh 你解决了吗? 没有。如果本地存储中的用户对象为空,我已经完成了单独的休息调用 【参考方案1】:

您可以添加令牌声明,我通常建议不要修改插件代码,但是

您可以通过在中添加新声明来添加所需的详细信息

AbstractJwtTokenGenerator(或者最好覆盖它)

JWTClaimsSet generateClaims(UserDetails details, String serializedPrincipal, Integer expiration) 
        JWTClaimsSet claimsSet = new JWTClaimsSet()
        claimsSet.setSubject(details.username)

        log.debug "Setting expiration to $expiration"
        Date now = new Date()
        claimsSet.setIssueTime(now)
        use(TimeCategory) 
            claimsSet.setExpirationTime(now + expiration.seconds)
        

        claimsSet.setCustomClaim('roles', details.authorities?.collect  it.authority )
        claimsSet.setCustomClaim('principal', serializedPrincipal)
        //claimsSet.setCustomClaim('username', details.getUsername()) //added customized user name claim
        log.debug "Generated claim set: $claimsSet.toJSONObject().toString()"
        return claimsSet
    

注意:claimsSet.setSubject(details.username) 中的主题已经包含用户名

【讨论】:

【参考方案2】:

根据docs:

如果您想在 JSON 响应中呈现其他信息, 你必须:

配置一个替代的 userDetailsS​​ervice bean,用于检索您想要的附加信息,并将其放入主体对象中。

配置一个备用 accessTokenJsonRenderer,从 restAuthenticationToken.principal 对象读取该信息。

关于userDetailsService 和accessTokenJsonRenderer 的其他信息

【讨论】:

以上是关于使用 grails spring security rest 插件登录时获取用户详细信息的主要内容,如果未能解决你的问题,请参考以下文章

Grails - grails-spring-security-rest - 无法从 application.yml 加载 jwt 机密

使用 Spring Security Grails 插件编码密码

Grails + spring-security-core:用户登录后如何分配角色?

在 Grails 中使用 Pre/Post Spring-Security Annotations

Grails 3.0 和 Spring Security

通过 Spring Security 配置 Grails 配置插件 grails-ckeditor