我搜寻了高低,但仍然无法找到这个非常烦人的问题的简单答案,
我遵循了这个很棒的指南: 带有多服务应用程序的JWT 一切都很好,但是在指南的最后,我们建议创建一个config-service(module),我已经完成了。
问题是我无法覆盖JwtConfig类的默认配置
项目结构如下:
-config-service | JwtConfig.java \ | resources \ | jwtConfig.properties -other-service (add dependency in the pom file of the config-service) | someOtherclass.java (import the JwtConfig class & using @Bean to initialize )
JwtConfig类:
/*all the imports*/ @PropertySource(value = "classpath:jwtConfig.properties") public class JwtConfig { @Value("${security.jwt.uri:/auth/**}") private String Uri; @Value("${security.jwt.header:Authorization}") private String header; @Value("${security.jwt.prefix:Bearer }") private String prefix; @Value("${security.jwt.expiration:#{24*60*60}}") private int expiration; @Value("${security.jwt.secret:JwtSecretKey}") private String secret; //getters
someOtherclass.java:
/*imports*/ @Configuration @EnableWebSecurity public class SecurityCredentialsConfig extends WebSecurityConfigurerAdapter { private JwtConfig jwtConfig; @Autowired public void setJwtConfig(JwtConfig jwtConfig) { this.jwtConfig = jwtConfig; } @Bean public JwtConfig jwtConfig() { return new JwtConfig(); } /*other code*/
问题在于,我在jwtConfig.properties文件中输入的参数并不重要,
例如:
security.jwt.uri=test
当其他服务加载它时,它不会出现在JwtConfig bean中。
只加载默认的@Value。
有人可以提些建议吗?我该如何解决?非常感谢!
看完Mikhail Kholodkov的帖子(谢谢!)之后,
解决方案是将以下注释添加到using服务执行点:
@PropertySources({ @PropertySource("classpath:jwtConfig.properties"), @PropertySource("classpath:app.properties") }) public class OtherServiceApplication { public static void main(String[] args) { SpringApplication.run(OtherServiceApplication.class, args); } }