我正在开发微服务,并且正在尝试将我的所有配置迁移到集中式配置。但是我不确定,但是对Spring Cloud Eureka的密码进行编码,解密或解析时出了点问题(或者网址还可以,并且正确地保护了密码,这是因为?)。这是运行docker-compose up
时得到的。每个微服务都会抛出这些异常。
movie_1 | java.lang.IllegalArgumentException: Illegal character in authority at index 7: http://u:${app.eureka-password}@eureka:8761/eureka/
movie_1 | at java.base/java.net.URI.create(URI.java:906) ~[na:na]
movie_1 | at com.sun.jersey.api.client.Client.resource(Client.java:434) ~[jersey-client-1.19.1.jar!/:1.19.1]
movie_1 | at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplicationsInternal(AbstractJerseyEurekaHttpClient.java:187) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient.getApplications(AbstractJerseyEurekaHttpClient.java:165) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.MetricsCollectingEurekaHttpClient.execute(MetricsCollectingEurekaHttpClient.java:73) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.executeOnNewServer(RedirectingEurekaHttpClient.java:118) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.RedirectingEurekaHttpClient.execute(RedirectingEurekaHttpClient.java:79) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:120) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1051) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:965) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1479) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.java:1446) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
movie_1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
movie_1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
movie_1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
movie_1 | at java.base/java.lang.Thread.run(Thread.java:835) ~[na:na]
movie_1 | Caused by: java.net.URISyntaxException: Illegal character in authority at index 7: http://u:${app.eureka-password}@eureka:8761/eureka/
movie_1 | at java.base/java.net.URI$Parser.fail(URI.java:2936) ~[na:na]
movie_1 | at java.base/java.net.URI$Parser.parseAuthority(URI.java:3270) ~[na:na]
movie_1 | at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3181) ~[na:na]
movie_1 | at java.base/java.net.URI$Parser.parse(URI.java:3137) ~[na:na]
movie_1 | at java.base/java.net.URI.<init>(URI.java:623) ~[na:na]
movie_1 | at java.base/java.net.URI.create(URI.java:904) ~[na:na]
movie_1 | ... 25 common frames omitted
movie_1 |
movie_1 | 2020-03-25 04:41:03.276 WARN 1 --- [freshExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient : Request execution failed with message: Illegal character in authority at index 7: http://u:${app.eureka-password}@eureka:8761/eureka/
movie_1 | 2020-03-25 04:41:03.276 ERROR 1 --- [freshExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_MOVIE/ef7c617370f2:movie:8080 - was unable to refresh its cache! status = Cannot execute request on any known server
movie_1 |
movie_1 | com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server
movie_1 | at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1051) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:965) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1479) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at com.netflix.discovery.DiscoveryClient$CacheRefreshThread.run(DiscoveryClient.java:1446) ~[eureka-client-1.9.8.jar!/:1.9.8]
movie_1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]
movie_1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
movie_1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
movie_1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
movie_1 | at java.base/java.lang.Thread.run(Thread.java:835) ~[na:na]
movie_1
这是我的全局配置文件的样子: 而且(由于编写此代码的过程而定),这些加密的值应类似于:
app.eureka-password: p
spring.rabbitmq,password: quest
所有这些代码都可以在没有集中配置且代码未加密的旧版本上正常工作。 `
application.yml
app:
eureka-username: u
eureka-password: '{cipher}bf298f6d5f878b342f9e44bec08cb9ac00b4ce57e98316f030194a225fac89fb'
eureka-server: localhost
auth-server: localhost
eureka:
client:
serviceUrl:
defaultZone: "http://${app.eureka-username}:${app.eureka-password}@${app.eureka-server}:8761/eureka/"
initialInstanceInfoReplicationIntervalSeconds: 5
registryFetchIntervalSeconds: 5
instance:
leaseRenewalIntervalInSeconds: 5
leaseExpirationDurationInSeconds: 5
spring.rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: '{cipher}17fcf0ae5b8c5cf87de6875b699be4a1746dd493a99d926c7a26a68c422117ef'
spring.cloud.stream.kafka.binder:
brokers: 127.0.0.1
defaultBrokerPort: 9092
# WARNING: Exposing all management endpoints over http should only be used during development, must be locked down in production!
management.endpoint.health.show-details: "ALWAYS"
management.endpoints.web.exposure.include: "*"
---
spring.profiles: docker
spring.rabbitmq.host: rabbitmq
spring.cloud.stream.kafka.binder.brokers: kafka
app:
eureka-server: eureka
auth-server: auth-server
当我替换此加密数据并再次构建项目时,我得到了类似的东西:
ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN
如果您需要更多信息或代码,请告诉我。任何想法,帮助将不胜感激。
如果涉及到eureka服务器,则只有几行代码:
主类:
@Slf4j
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
安全配置:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final String username;
private final String password;
@Autowired
public SecurityConfig(
@Value("${app.eureka-username}") String username,
@Value("${app.eureka-password}") String password
) {
this.username = username;
this.password = password;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.passwordEncoder(NoOpPasswordEncoder.getInstance())
.withUser(username).password(password)
.authorities("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
和bootstrap.yml:
app.config-server: localhost
spring:
application.name: eureka-server
cloud.config:
failFast: true
retry:
initialInterval: 3000
multiplier: 1.3
maxInterval: 10000
maxAttempts: 20
uri: http://${CONFIG_SERVER_USR}:${CONFIG_SERVER_PWD}@${app.config-server}:8888
---
spring.profiles: docker
app.config-server: config-server
有什么想法吗?