前言
在这个基础上,进行整合。
spring security oauth2学习 -- 快速入门_本郡主是喵的博客-CSDN博客
1.jwt的一般使用
先把 reids,common-pools 等依赖删掉。
删掉redis的下相关配置
1.1 导入依赖
		<!--jjwt-->
		<dependency>
			<groupId>io.jsonwebtoken</groupId>
			<artifactId>jjwt</artifactId>
			<version>0.9.1</version>
		</dependency> 
1.2 核心代码
创建jwtTokenConfig.java
@Configuration
public class jwtTokenConfig {
    @Bean
    public JwtTokenStore jwtTokenStore(){
        return new JwtTokenStore(jwtAccessTokenConverter());
    }
    
    // // jwt令牌转换器,将内置token转换成jwt
    @Bean
    public JwtAccessTokenConverter jwtAccessTokenConverter() {
        // 配合JWT使用的秘钥
        JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();
        accessTokenConverter.setSigningKey("test_key");
        return accessTokenConverter;
    }
}
 
在 AuthenticationServer.java 里面新增这些。
 @Autowired
    private JwtTokenStore tokenStore;
    @Autowired
    private JwtAccessTokenConverter jwtAccessTokenConverter;
    /**
     *  密码模式
     * @param
     * @return
     */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints.authenticationManager(authenticationManager)
                .userDetailsService(userService)
                // 配置令牌存储策略
                .tokenStore(tokenStore)
                .accessTokenConverter(jwtAccessTokenConverter);
    } 
运行,启动!

复制这个token去官网解析。

2.扩展jwt的内容
我们新建JwtTokenEnhancer.java,指定扩容的内容。
在AuthenticationServer.java ,配置中,加入你的扩容配置,和token转换器。
新建 JwtTokenEnhancer.java
public class JwtTokenEnhancer implements TokenEnhancer {
    // 往我们的jwt中添加自定义的信息
    @Override
    public OAuth2AccessToken enhance(OAuth2AccessToken oAuth2AccessToken, OAuth2Authentication oAuth2Authentication) {
        HashMap<String, Object> info = new HashMap<>();
        info.put("enhance","enhance info");
        ((DefaultOAuth2AccessToken)oAuth2AccessToken).setAdditionalInformation(info);
        return oAuth2AccessToken;
    }
}
 
在JwtTokenConfig.java 新加,这个bean 就是我们自定义的bean。
 @Bean
    public JwtTokenEnhancer jwtTokenEnhancer(){
        return new JwtTokenEnhancer();
    } 
往 AuthenticationServer.java 新加
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        // 配置令牌扩容策略
        TokenEnhancerChain enhancerChain = new TokenEnhancerChain();
        ArrayList<TokenEnhancer> delegates = new ArrayList<>();
        delegates.add(jwtTokenEnhancer);
        delegates.add(jwtAccessTokenConverter);
        // 我们扩容的token也是需要令牌转换成jwt
        enhancerChain.setTokenEnhancers(delegates);
        endpoints.authenticationManager(authenticationManager)
                .userDetailsService(userService)
                // 配置令牌存储策略
                .tokenStore(tokenStore)
                .accessTokenConverter(jwtAccessTokenConverter)
                .tokenEnhancer(enhancerChain); // 使用令牌扩容
    } 
用postMan重新访问那个网址。
拿到token解析。

3.解析jwt的内容
衔接上个博客,修改我们 UserController.java 中的
public Object getCurrentUser(Authentication authentication,HttpServletRequest request){
        // 从请求头中,那jwt token
        String header = request.getHeader("Authorization");
        String token = header.substring(header.indexOf("bearer") + 7);
        Object principal = authentication.getPrincipal();
        return Jwts.parser()
                .setSigningKey("test_key")
                .parseClaimsJws(token)
                .getBody();
    } 
我们还是从授权服务器拿到token,后直接资源服务器拿内容。

4.开启刷新令牌
往我们授权服务器配置中,

 .authorizedGrantTypes("password","refresh_token","authorization_code"); 
// 开启刷新令牌,貌似传入多个模式参数,能够开启授权服务器多个模式 
打开postMan,访问原先拿token,会发现多了个refresh_token 键值对

 按照下图,这个将你访问的路径复制一份。这个refresh_ token 的value值就是,上图的刷新令牌。



















