Linux环境下jwt注入不进来
来源:6-9 使用JWT替换默认令牌

无敌威威
2018-09-12
项目跑起来先运行的@Configuration是这个,导致jwt注入不进来,加上@Order也不好使,求怎么解决
/**
先运行这个@Configuration
*/
@Configuration
@EnableAuthorizationServer
public class WeiAuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private TokenStore tokenStore;
@Autowired(required = false)
private JwtAccessTokenConverter jwtAccessTokenConverter;
@Autowired(required = false)
private TokenEnhancer jwtTokenEnhancer;
@Autowired
private SecurityProperties securityProperties;
/**
* 认证及token配置
*/
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore)
.authenticationManager(authenticationManager)
.userDetailsService(userDetailsService);
System.out.println((jwtAccessTokenConverter == null) + "3");
System.out.println((jwtTokenEnhancer == null) + "4");
if(jwtAccessTokenConverter != null && jwtTokenEnhancer != null){
TokenEnhancerChain enhancerChain = new TokenEnhancerChain();
List<TokenEnhancer> enhancers = new ArrayList<>();
enhancers.add(jwtTokenEnhancer);
enhancers.add(jwtAccessTokenConverter);
enhancerChain.setTokenEnhancers(enhancers);
endpoints.tokenEnhancer(enhancerChain)
.accessTokenConverter(jwtAccessTokenConverter);
}
}
/**
* tokenKey的访问权限表达式配置
*/
@Override
public void configure(AuthorizationServerSecurityConfigurer security) {
security.tokenKeyAccess("permitAll()");
}
/**
* 客户端配置
*/
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
InMemoryClientDetailsServiceBuilder builder =clients.inMemory();
if (ArrayUtils.isNotEmpty(securityProperties.getOauth2().getClients())) {
for (OAuth2ClientProperties client : securityProperties.getOauth2().getClients()) {
builder.withClient(client.getClientId()).secret(client.getClientSecret())
.accessTokenValiditySeconds(client.getAccessTokenValidateSeconds())
.authorizedGrantTypes("refresh_token", "authorization_code", "password")
.refreshTokenValiditySeconds(2592000)
.scopes("all");
}
}
}
}
// 后来在运行的这个@Configuration
@Configuration
public class TokenStoreConfig {
@Bean
public OAuth2WebSecurityExpressionHandler oAuth2WebSecurityExpressionHandler(ApplicationContext applicationContext) {
OAuth2WebSecurityExpressionHandler expressionHandler = new OAuth2WebSecurityExpressionHandler();
expressionHandler.setApplicationContext(applicationContext);
return expressionHandler;
}
/**
* 使用redis存储token的配置,只有在imooc.security.oauth2.tokenStore配置为redis时生效
*/
@Configuration
@ConditionalOnProperty(prefix = "weiwei.security.oauth2", name = "storeType", havingValue = "redis")
public static class RedisConfig {
@Autowired
private RedisConnectionFactory redisConnectionFactory;
/**
* @return
*/
@Bean
public TokenStore redisTokenStore() {
return new RedisTokenStore(redisConnectionFactory);
}
}
/**
* 使用jwt时的配置,默认生效
*/
@Configuration
@ConditionalOnProperty(prefix = "weiwei.security.oauth2", name = "storeType", havingValue = "jwt", matchIfMissing = true)
public static class JwtTokenConfig {
@Autowired
private SecurityProperties securityProperties;
@Bean
public TokenStore jwtTokenStore() {
return new JwtTokenStore(jwtAccessTokenConverter());
}
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
JwtAccessTokenConverter accessTokenConverter = new JwtAccessTokenConverter();
accessTokenConverter.setSigningKey(securityProperties.getOauth2().getJwtSigningKey());
System.out.println((accessTokenConverter == null) + "1");
return accessTokenConverter;
}
@Bean
@ConditionalOnBean(TokenEnhancer.class)
public TokenEnhancer jwtTokenEnhancer(){
System.out.println("jwtTokenEnhancer 2");
return new WeiTokenJwtEnhancer();
}
}
}
控制台打印顺序
true3
true4
false1
导致jwtAccessTokenConverter注入不进来
写回答
1回答
-
JoJo
2018-09-20
配置文件的加载顺序对配置是没影响的,可以百度一下Spring的BeanFactory的机制。没注入的原因我现在也不太确定,你用的spring相关框架的版本跟课程是一致的么?
012018-09-20
Spring Security技术栈开发企业级认证与授权
Spring Security技术栈,REST风格开发常见接口,独立开发认证授权模块保证REST服务安全
2662 学习 · 1561 问题
相似问题