作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬
学习必须往深处挖,挖的越深,基础越扎实!
使用JWT替换默认令牌
什么是jwt?
JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。
优点:在分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。
缺点:是无法作废已颁布的令牌/不易应对数据过期。
特点:
- 自包含 : 包含自定义信息
- 密签:使用指定密钥签名,防止串改,不是防止破解
- 可扩展:也就是自定义业务信息
配置jwt
主要是增加了JwtTokenConfig类;
为了能方便切换,使用了 @ConditionalOnProperty
注解;
package cn.mrcode.imooc.springsecurity.securityapp;
@Configuration
public class TokenStoreConfig {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Bean
@ConditionalOnProperty(prefix = "imooc.security.oauth2", name = "tokenStore", havingValue = "redis")
public TokenStore tokenStore() {
return new MyRedisTokenStore(redisConnectionFactory);
}
@Configuration
// matchIfMissing :当tokenStore没有值的时候是否生效
// 当tokenStore = jwt的时候或则tokenStore没有配置的时候使用下面的配置
@ConditionalOnProperty(prefix = "imooc.security.oauth2", name = "tokenStore", havingValue = "jwt", matchIfMissing = true)
public static class JwtTokenConfig {
@Autowired
private SecurityProperties securityProperties;
@Autowired
private JwtAccessTokenConverter jwtAccessTokenConverter;
@Bean
public TokenStore jwtTokenStore() {
return new JwtTokenStore(jwtAccessTokenConverter);
}
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey(securi