accessTokenConverter与tokenEnhancer的区别

来源:8-1 课程总结

萌白在努力

2019-11-28

在课程中,我看到老师是直接将jwtAccessTokenConverter放到tokenEnhancer中,我在学习本课程前是使用上面这种方式来存放的,tokenEnhancer可存放一些额外的信息。在网上看到一些大大是建议将jwtAccessTokenConverter与tokenEnhancer存放在一个TokenEnhancerChain里再放到tokenEnhancer中。请问这三者的区别:

第一种,像老师这样

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
                .userDetailsService(userDetailsService)
                .tokenEnhancer(jwtAccessTokenConverter)
                .authenticationManager(authenticationManager);
    }

第二种,我在jwtTokenEnhancer中增加了额外的信息,jwtAccessTokenConverter另外交给accessTokenConverter

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
                .userDetailsService(userDetailsService)
                .tokenStore(tokenStore())
                .accessTokenConverter(jwtAccessTokenConverter)
                .tokenEnhancer(jwtTokenEnhancer)
               .authenticationManager(authenticationManager);
    }

第三种,结合到TokenEnhancerChain 中,并且也是将jwtAccessTokenConverter另外交给accessTokenConverter

@Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.tokenStore(tokenStore)
                .authenticationManager(authenticationManager)
                .userDetailsService(userDetailsService);

        if (jwtAccessTokenConverter != null && jwtTokenEnhancer !=null){
            TokenEnhancerChain enhancerChain = new TokenEnhancerChain();
            List<TokenEnhancer> enhancers = new ArrayList<>();
            enhancers.add(jwtTokenEnhancer);
            enhancers.add(jwtAccessTokenConverter);
            enhancerChain.setTokenEnhancers(enhancers);//将自定义Enhancer加入EnhancerChain的delegates数组中

            endpoints.tokenEnhancer(enhancerChain)//为什么不直接把jwtTokenEnhancer加在这个位置呢?
            .accessTokenConverter(jwtAccessTokenConverter);
        }
    }

网上大多采用第三种,请问老师这三种的区别是什么?我尤其无法弄懂.accessTokenConverter()的作用

写回答

1回答

JoJo

2019-11-29

AccessTokenConverter作用是把token字符串转换成OAuth2AccessToken对象。

TokenEnhancer作用是在OAuth2AccessToken里添加额外的信息。

JwtAccessTokenConverter 即实现了AccessTokenConverter接口,也实现了TokenEnhancer接口。

0
1
根号三HK
老师我也有同样的疑问 就是这三种配置方式有什么区别,第三种为什么还要在TokenEnhancerChain里再配置jwtAccessTokenConverter,endpoints.accessTokenConverter(jwtAccessTokenConverter)不是已经添加了吗
2020-04-15
共1条回复

Spring Cloud微服务安全实战 可落地的安全方案

从API到复杂微服务场景,实战部署可落地的安全方案。

1029 学习 · 370 问题

查看课程