V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Blueming
V2EX  ›  Java

SpringSecurity Oauth2 如何动态自定义 jwt 生成的内容

  •  
  •   Blueming · 2020-08-07 11:51:23 +08:00 · 2175 次点击
    这是一个创建于 1567 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前继承了 JwtAccessTokenConverter 类来实现添加额外内容,但是貌似只能硬编码

    public class CustomJwtTokenConverter extends JwtAccessTokenConverter {
        @Override
        public OAuth2AccessToken enhance(OAuth2AccessToken oAuth2AccessToken, OAuth2Authentication oAuth2Authentication) {
            Map<String, Object> additional = new HashMap<>(16);
            additional.put("key", "value");
            ((DefaultOAuth2AccessToken) oAuth2AccessToken).setAdditionalInformation(additional);
            return super.enhance(oAuth2AccessToken, oAuth2Authentication);
        }
    }
    

    我想实现的就是在生成 jwt token 时将当前请求的用户的 userid 放入 token 中 该如何实现呢?

    6 条回复    2020-08-08 10:38:04 +08:00
    zhenjiachen
        1
    zhenjiachen  
       2020-08-07 13:10:39 +08:00
    继承 DefaultAccessTokenConverter 这个类,然后 set 到 AccessTokenConverter 中就好了
    monkeyk
        2
    monkeyk  
       2020-08-07 14:01:01 +08:00
    看这开源 https://gitee.com/mkk/MyOIDC, 里面有对应的配置与实现
    Blueming
        3
    Blueming  
    OP
       2020-08-07 14:56:32 +08:00
    @zhenjiachen 如何把用户的属性传进去呢
    seliote
        4
    seliote  
       2020-08-07 20:29:43 +08:00
    项目都没了
    viakiba
        5
    viakiba  
       2020-08-08 10:37:00 +08:00
    OAuth2Authentication 这个对象有个 getOAuth2Request() 方法可以获取客户端应用程序的详细信息。你可以看一下这里是怎么存储内容的。比如客户端请求会带一个唯一 id 或者账号啥的,这里可以取到。通过这个唯一 id 就可以取到数据库或者缓存的内容了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:05 · PVG 04:05 · LAX 12:05 · JFK 15:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.