/*** 使用redis存儲token的配置* Created by macro on 2019/10/8.*/@ConfigurationpublicclassRedisTokenStoreConfig{@Autowiredprivate RedisConnectionFactory redisConnectionFactory;@Beanpublic TokenStore redisTokenStore (){returnnewRedisTokenStore(redisConnectionFactory);}}
在認(rèn)證服務(wù)器配置中指定令牌的存儲策略為Redis:
/*** 認(rèn)證服務(wù)器配置* Created by macro on 2019/9/30.*/@Configuration@EnableAuthorizationServerpublicclassAuthorizationServerConfigextendsAuthorizationServerConfigurerAdapter{@Autowiredprivate PasswordEncoder passwordEncoder;@Autowiredprivate AuthenticationManager authenticationManager;@Autowiredprivate UserService userService;@Autowired@Qualifier("redisTokenStore")private TokenStore tokenStore;/*** 使用密碼模式需要配置*/@Overridepublicvoidconfigure(AuthorizationServerEndpointsConfigurer endpoints){endpoints.authenticationManager(authenticationManager).userDetailsService(userService).tokenStore(tokenStore);//配置令牌存儲策略}//省略代碼...}
/*** 使用Jwt存儲token的配置* Created by macro on 2019/10/8.*/@ConfigurationpublicclassJwtTokenStoreConfig{@Beanpublic TokenStore jwtTokenStore(){returnnewJwtTokenStore(jwtAccessTokenConverter());}@Beanpublic JwtAccessTokenConverter jwtAccessTokenConverter(){JwtAccessTokenConverter accessTokenConverter =newJwtAccessTokenConverter();accessTokenConverter.setSigningKey("test_key");//配置JWT使用的秘鑰return accessTokenConverter;}}
在認(rèn)證服務(wù)器配置中指定令牌的存儲策略為JWT:
/*** 認(rèn)證服務(wù)器配置* Created by macro on 2019/9/30.*/@Configuration@EnableAuthorizationServerpublicclassAuthorizationServerConfigextendsAuthorizationServerConfigurerAdapter{@Autowiredprivate PasswordEncoder passwordEncoder;@Autowiredprivate AuthenticationManager authenticationManager;@Autowiredprivate UserService userService;@Autowired@Qualifier("jwtTokenStore")private TokenStore tokenStore;@Autowiredprivate JwtAccessTokenConverter jwtAccessTokenConverter;@Autowiredprivate JwtTokenEnhancer jwtTokenEnhancer;/*** 使用密碼模式需要配置*/@Overridepublicvoidconfigure(AuthorizationServerEndpointsConfigurer endpoints){endpoints.authenticationManager(authenticationManager).userDetailsService(userService).tokenStore(tokenStore)//配置令牌存儲策略.accessTokenConverter(jwtAccessTokenConverter);}//省略代碼...}
/*** Jwt內(nèi)容增強(qiáng)器* Created by macro on 2019/10/8.*/publicclassJwtTokenEnhancerimplementsTokenEnhancer{@Overridepublic OAuth2AccessToken enhance(OAuth2AccessToken accessToken, OAuth2Authentication authentication){Map<String, Object> info =newHashMap<>();info.put("enhance","enhance info");((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(info);return accessToken;}}
創(chuàng)建一個JwtTokenEnhancer實(shí)例:
/*** 使用Jwt存儲token的配置* Created by macro on 2019/10/8.*/@ConfigurationpublicclassJwtTokenStoreConfig{//省略代碼...@Beanpublic JwtTokenEnhancer jwtTokenEnhancer(){returnnewJwtTokenEnhancer();}}
在認(rèn)證服務(wù)器配置中配置JWT的內(nèi)容增強(qiáng)器:
/*** 認(rèn)證服務(wù)器配置* Created by macro on 2019/9/30.*/@Configuration@EnableAuthorizationServerpublicclassAuthorizationServerConfigextendsAuthorizationServerConfigurerAdapter{@Autowiredprivate PasswordEncoder passwordEncoder;@Autowiredprivate AuthenticationManager authenticationManager;@Autowiredprivate UserService userService;@Autowired@Qualifier("jwtTokenStore")private TokenStore tokenStore;@Autowiredprivate JwtAccessTokenConverter jwtAccessTokenConverter;@Autowiredprivate JwtTokenEnhancer jwtTokenEnhancer;/*** 使用密碼模式需要配置*/@Overridepublicvoidconfigure(AuthorizationServerEndpointsConfigurer endpoints){TokenEnhancerChain enhancerChain =newTokenEnhancerChain();List<TokenEnhancer> delegates =newArrayList<>();delegates.add(jwtTokenEnhancer);//配置JWT的內(nèi)容增強(qiáng)器delegates.add(jwtAccessTokenConverter);enhancerChain.setTokenEnhancers(delegates);endpoints.authenticationManager(authenticationManager).userDetailsService(userService).tokenStore(tokenStore)//配置令牌存儲策略.accessTokenConverter(jwtAccessTokenConverter).tokenEnhancer(enhancerChain);}//省略代碼...}
/*** 認(rèn)證服務(wù)器配置* Created by macro on 2019/9/30.*/@Configuration@EnableAuthorizationServerpublicclassAuthorizationServerConfigextendsAuthorizationServerConfigurerAdapter{@Overridepublicvoidconfigure(ClientDetailsServiceConfigurer clients)throws Exception {clients.inMemory().withClient("admin").secret(passwordEncoder.encode("admin123456")).accessTokenValiditySeconds(3600).refreshTokenValiditySeconds(864000).redirectUris("http://www.baidu.com").autoApprove(true)//自動授權(quán)配置.scopes("all").authorizedGrantTypes("authorization_code","password","refresh_token");//添加授權(quán)模式}}