Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
spring-cloud-netflix
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
openSource
spring-cloud-netflix
Commits
d1cb4294
Commit
d1cb4294
authored
Sep 25, 2015
by
Dave Syer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Explicitly snag secure URL for config server if desired
If the configserver registers with securePortEnabled=true we should respect that in the discovery process. Fixes gh-450
parent
3697ce7f
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
54 additions
and
6 deletions
+54
-6
spring-cloud-netflix.adoc
docs/src/main/asciidoc/spring-cloud-netflix.adoc
+13
-0
DiscoveryClientConfigServiceBootstrapConfiguration.java
...g/DiscoveryClientConfigServiceBootstrapConfiguration.java
+17
-1
EurekaDiscoveryClient.java
...framework/cloud/netflix/eureka/EurekaDiscoveryClient.java
+4
-5
DiscoveryClientConfigServiceBootstrapConfigurationTests.java
...coveryClientConfigServiceBootstrapConfigurationTests.java
+20
-0
No files found.
docs/src/main/asciidoc/spring-cloud-netflix.adoc
View file @
d1cb4294
...
...
@@ -95,6 +95,19 @@ These links show up in the metadata that is consumed by clients, and
used in some scenarios to decide whether to send requests to your
application, so it's helpful if they are accurate.
=== Registering a Secure Application
If your app wants to be contacted over HTTPS you can set two flags in
the `EurekaInstanceConfig`, _viz_
`eureka.instance.[nonSecurePortEnabled,securePortEnabled]=[false,true]`
respectively. This will make Eureka publish instance information
showing an explicit preference for secure communication. The Spring
Cloud `DiscoveryClient` will always return an `https://...` URI for a
service configured this way, and the Eureka (native) instance
information will have a secure health check URL. Because of the way
Eureka works internally, it will still publish a non-secure URL for
status and home page unless you also override those explicitly.
=== Eureka's Health Checks
By default, Eureka uses the client heartbeat to determine if a client is up.
...
...
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfiguration.java
View file @
d1cb4294
...
...
@@ -16,9 +16,13 @@
package
org
.
springframework
.
cloud
.
netflix
.
config
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnClass
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.cloud.client.ServiceInstance
;
import
org.springframework.cloud.client.discovery.DiscoveryClient
;
import
org.springframework.cloud.config.client.ConfigClientProperties
;
import
org.springframework.cloud.config.client.ConfigServicePropertySourceLocator
;
import
org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration
;
...
...
@@ -49,6 +53,9 @@ public class DiscoveryClientConfigServiceBootstrapConfiguration {
private
ConfigClientProperties
config
;
@Autowired
private
DiscoveryClient
client
;
@Autowired
private
EurekaClient
eurekaClient
;
@EventListener
(
ContextRefreshedEvent
.
class
)
...
...
@@ -63,7 +70,7 @@ public class DiscoveryClientConfigServiceBootstrapConfiguration {
log
.
debug
(
"Locating configserver via discovery"
);
InstanceInfo
server
=
this
.
eurekaClient
.
getNextServerFromEureka
(
this
.
config
.
getDiscovery
().
getServiceId
(),
false
);
String
url
=
server
.
getHomePageUrl
(
);
String
url
=
getHomePage
(
server
);
if
(
server
.
getMetadata
().
containsKey
(
"password"
))
{
String
user
=
server
.
getMetadata
().
get
(
"user"
);
user
=
user
==
null
?
"user"
:
user
;
...
...
@@ -85,4 +92,13 @@ public class DiscoveryClientConfigServiceBootstrapConfiguration {
}
}
private
String
getHomePage
(
InstanceInfo
server
)
{
List
<
ServiceInstance
>
instances
=
this
.
client
.
getInstances
(
this
.
config
.
getDiscovery
().
getServiceId
());
if
(
instances
==
null
||
instances
.
isEmpty
())
{
return
server
.
getHomePageUrl
();
}
return
instances
.
get
(
0
).
getUri
().
toString
()
+
"/"
;
}
}
spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/eureka/EurekaDiscoveryClient.java
View file @
d1cb4294
...
...
@@ -17,7 +17,6 @@
package
org
.
springframework
.
cloud
.
netflix
.
eureka
;
import
static
com
.
netflix
.
appinfo
.
InstanceInfo
.
PortType
.
SECURE
;
import
static
com
.
netflix
.
appinfo
.
InstanceInfo
.
PortType
.
UNSECURE
;
import
java.net.URI
;
import
java.util.ArrayList
;
...
...
@@ -113,8 +112,8 @@ public class EurekaDiscoveryClient implements DiscoveryClient {
@Override
public
int
getPort
()
{
// assume if
un
secure is enabled, that is the default
if
(
this
.
instance
.
isPortEnabled
(
UNSECURE
)
||
!
this
.
instance
.
isPortEnabled
(
SECURE
))
{
// assume if secure is enabled, that is the default
if
(!
this
.
instance
.
isPortEnabled
(
SECURE
))
{
return
this
.
instance
.
getPort
();
}
return
this
.
instance
.
getSecurePort
();
...
...
@@ -122,8 +121,8 @@ public class EurekaDiscoveryClient implements DiscoveryClient {
@Override
public
boolean
isSecure
()
{
// assume if
un
secure is enabled, that is the default
return
!
this
.
instance
.
isPortEnabled
(
UNSECURE
)
&&
this
.
instance
.
isPortEnabled
(
SECURE
);
// assume if secure is enabled, that is the default
return
this
.
instance
.
isPortEnabled
(
SECURE
);
}
@Override
...
...
spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/config/DiscoveryClientConfigServiceBootstrapConfigurationTests.java
View file @
d1cb4294
...
...
@@ -19,6 +19,8 @@ package org.springframework.cloud.netflix.config;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
mockito
.
BDDMockito
.
given
;
import
java.util.Arrays
;
import
org.junit.After
;
import
org.junit.Test
;
import
org.mockito.Mockito
;
...
...
@@ -28,6 +30,7 @@ import org.springframework.cloud.config.client.ConfigClientProperties;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
import
com.netflix.appinfo.InstanceInfo
;
import
com.netflix.appinfo.InstanceInfo.PortType
;
import
com.netflix.discovery.EurekaClient
;
/**
...
...
@@ -76,6 +79,23 @@ public class DiscoveryClientConfigServiceBootstrapConfigurationTests {
}
@Test
public
void
secureWhenRequested
()
throws
Exception
{
this
.
info
=
InstanceInfo
.
Builder
.
newBuilder
().
setAppName
(
"app"
).
setHostName
(
"foo"
)
.
setHomePageUrl
(
"/"
,
null
).
enablePort
(
PortType
.
SECURE
,
true
).
setSecurePort
(
443
).
build
();
given
(
this
.
client
.
getNextServerFromEureka
(
"CONFIGSERVER"
,
false
))
.
willReturn
(
this
.
info
);
given
(
this
.
client
.
getInstancesByVipAddress
(
"CONFIGSERVER"
,
false
))
.
willReturn
(
Arrays
.
asList
(
this
.
info
));
setup
(
"spring.cloud.config.discovery.enabled=true"
);
assertEquals
(
1
,
this
.
context
.
getBeanNamesForType
(
DiscoveryClientConfigServiceBootstrapConfiguration
.
class
).
length
);
Mockito
.
verify
(
this
.
client
).
getNextServerFromEureka
(
"CONFIGSERVER"
,
false
);
ConfigClientProperties
locator
=
this
.
context
.
getBean
(
ConfigClientProperties
.
class
);
assertEquals
(
"https://foo:443/"
,
locator
.
getRawUri
());
}
@Test
public
void
setsPasssword
()
throws
Exception
{
this
.
info
.
getMetadata
().
put
(
"password"
,
"bar"
);
given
(
this
.
client
.
getNextServerFromEureka
(
"CONFIGSERVER"
,
false
)).
willReturn
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment