Springsceurity使用TokenEnhancer和JwtAccessConverter增强jwt令牌源码解析

springsecurity登录以后,默认会返回一个令牌(access_token):
在这里插入图片描述
通过查看源码,DefaultTokenServices中的createAccessToken方法,令牌其实就是一个uuid:

在这里插入图片描述
实际使用中,一般不会使用默认令牌,而是使用jwt令牌来替代默认令牌,这样做的好处是携带默认令牌访问资源,每次都要通过授权服务来认证令牌是否有效,而jwt则可以做到资源服务中自己解析从而判断令牌的有效性;另外一个优势就是jwt令牌有更高的安全性,可以使用公钥和私钥进行加密和解密,不容易被破解。

jwt令牌配置,定义JwtAccessTokenConverter,配置TokenStore

@Bean
public TokenStore tokenStore() {
    return new JwtTokenStore(accessTokenConverter());

}
@Bean
public JwtAccessTokenConverter accessTokenConverter() {
    JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
    //对称秘钥,资源服务器使用该秘钥来验证
    converter.setSigningKey(JwtConstant.SING_KEY);
     return converter;
     }
}

在这里插入图片描述

AuthorizationServerTokenServices配置中添加令牌增强,令牌增强的意思是,用jwt令牌来加强默认令牌,而不是替代。

// 令牌(token)管理服务
    @Bean
    public AuthorizationServerTokenServices tokenService(){
        DefaultTokenServices services = new DefaultTokenServices();
        // 客户端详情服务
        // 因为是向客户端颁发令牌,所以需要知道是哪一个客户端
        services.setClientDetailsService(myClientDetailsService);
        // 支持刷新令牌
        services.setSupportRefreshToken(true);
        // 令牌存储策略
        services.setTokenStore(tokenStore);

        //令牌增强
        TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
        tokenEnhancerChain.setTokenEnhancers(Arrays.asList(accessTokenConverter));
        services.setTokenEnhancer(tokenEnhancerChain);

        // 令牌默认有效期24小时
        services.setAccessTokenValiditySeconds(7200 * 12);

        // 刷新令牌默认有效期3天
        services.setRefreshTokenValiditySeconds(259200);
        return  services;
    }

在这里插入图片描述
运行结果:
在这里插入图片描述
这里可以看到,多了一个jti,这个jti就是默认的令牌,也就是uuid。
查看源码:JwtAccessTokenConverter中的enhance方法,对现有的token进行了增强:
在这里插入图片描述
其中,encode的方法将当前信息转化成jwt token令牌,而默认的token会被key为jti保存。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值