Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in / Register
Toggle navigation
S
spring-boot
Project
Project
Details
Activity
Releases
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
DEMO
spring-boot
Commits
ad77b655
Commit
ad77b655
authored
Jan 16, 2017
by
Stephane Nicoll
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #7905 from eddumelendez:ldap_actuator
* pr/7905: Polish contribution Add LDAP health actuator
parents
db99ed84
8bef0a1e
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
245 additions
and
5 deletions
+245
-5
pom.xml
spring-boot-actuator/pom.xml
+5
-0
HealthIndicatorAutoConfiguration.java
...tuate/autoconfigure/HealthIndicatorAutoConfiguration.java
+29
-4
LdapHealthIndicator.java
...ingframework/boot/actuate/health/LdapHealthIndicator.java
+62
-0
additional-spring-configuration-metadata.json
...es/META-INF/additional-spring-configuration-metadata.json
+6
-0
HealthIndicatorAutoConfigurationTests.java
.../autoconfigure/HealthIndicatorAutoConfigurationTests.java
+42
-1
LdapHealthIndicatorTests.java
...amework/boot/actuate/health/LdapHealthIndicatorTests.java
+100
-0
appendix-application-properties.adoc
...cs/src/main/asciidoc/appendix-application-properties.adoc
+1
-0
No files found.
spring-boot-actuator/pom.xml
View file @
ad77b655
...
@@ -166,6 +166,11 @@
...
@@ -166,6 +166,11 @@
<artifactId>
spring-data-couchbase
</artifactId>
<artifactId>
spring-data-couchbase
</artifactId>
<optional>
true
</optional>
<optional>
true
</optional>
</dependency>
</dependency>
<dependency>
<groupId>
org.springframework.data
</groupId>
<artifactId>
spring-data-ldap
</artifactId>
<optional>
true
</optional>
</dependency>
<dependency>
<dependency>
<groupId>
org.springframework.data
</groupId>
<groupId>
org.springframework.data
</groupId>
<artifactId>
spring-data-mongodb
</artifactId>
<artifactId>
spring-data-mongodb
</artifactId>
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfiguration.java
View file @
ad77b655
/*
/*
* Copyright 2012-201
6
the original author or authors.
* Copyright 2012-201
7
the original author or authors.
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may not use this file except in compliance with the License.
...
@@ -39,6 +39,7 @@ import org.springframework.boot.actuate.health.DiskSpaceHealthIndicatorPropertie
...
@@ -39,6 +39,7 @@ import org.springframework.boot.actuate.health.DiskSpaceHealthIndicatorPropertie
import
org.springframework.boot.actuate.health.HealthAggregator
;
import
org.springframework.boot.actuate.health.HealthAggregator
;
import
org.springframework.boot.actuate.health.HealthIndicator
;
import
org.springframework.boot.actuate.health.HealthIndicator
;
import
org.springframework.boot.actuate.health.JmsHealthIndicator
;
import
org.springframework.boot.actuate.health.JmsHealthIndicator
;
import
org.springframework.boot.actuate.health.LdapHealthIndicator
;
import
org.springframework.boot.actuate.health.MailHealthIndicator
;
import
org.springframework.boot.actuate.health.MailHealthIndicator
;
import
org.springframework.boot.actuate.health.MongoHealthIndicator
;
import
org.springframework.boot.actuate.health.MongoHealthIndicator
;
import
org.springframework.boot.actuate.health.OrderedHealthAggregator
;
import
org.springframework.boot.actuate.health.OrderedHealthAggregator
;
...
@@ -56,6 +57,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
...
@@ -56,6 +57,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.couchbase.CouchbaseDataAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration
;
import
org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration
;
import
org.springframework.boot.autoconfigure.elasticsearch.jest.JestAutoConfiguration
;
...
@@ -77,6 +79,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
...
@@ -77,6 +79,7 @@ import org.springframework.data.mongodb.core.MongoTemplate;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.core.JdbcTemplate
;
import
org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
;
import
org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
;
import
org.springframework.ldap.core.LdapOperations
;
import
org.springframework.mail.javamail.JavaMailSenderImpl
;
import
org.springframework.mail.javamail.JavaMailSenderImpl
;
/**
/**
...
@@ -96,9 +99,10 @@ import org.springframework.mail.javamail.JavaMailSenderImpl;
...
@@ -96,9 +99,10 @@ import org.springframework.mail.javamail.JavaMailSenderImpl;
CassandraDataAutoConfiguration
.
class
,
CouchbaseDataAutoConfiguration
.
class
,
CassandraDataAutoConfiguration
.
class
,
CouchbaseDataAutoConfiguration
.
class
,
DataSourceAutoConfiguration
.
class
,
ElasticsearchAutoConfiguration
.
class
,
DataSourceAutoConfiguration
.
class
,
ElasticsearchAutoConfiguration
.
class
,
JestAutoConfiguration
.
class
,
JmsAutoConfiguration
.
class
,
JestAutoConfiguration
.
class
,
JmsAutoConfiguration
.
class
,
MailSenderAutoConfiguration
.
class
,
MongoAutoConfiguration
.
class
,
LdapDataAutoConfiguration
.
class
,
MailSenderAutoConfiguration
.
class
,
MongoDataAutoConfiguration
.
class
,
RabbitAutoConfiguration
.
class
,
MongoAutoConfiguration
.
class
,
MongoDataAutoConfiguration
.
class
,
RedisAutoConfiguration
.
class
,
SolrAutoConfiguration
.
class
})
RabbitAutoConfiguration
.
class
,
RedisAutoConfiguration
.
class
,
SolrAutoConfiguration
.
class
})
@EnableConfigurationProperties
({
HealthIndicatorProperties
.
class
})
@EnableConfigurationProperties
({
HealthIndicatorProperties
.
class
})
@Import
({
@Import
({
ElasticsearchHealthIndicatorConfiguration
.
ElasticsearchClientHealthIndicatorConfiguration
.
class
,
ElasticsearchHealthIndicatorConfiguration
.
ElasticsearchClientHealthIndicatorConfiguration
.
class
,
...
@@ -231,6 +235,27 @@ public class HealthIndicatorAutoConfiguration {
...
@@ -231,6 +235,27 @@ public class HealthIndicatorAutoConfiguration {
}
}
@Configuration
@ConditionalOnClass
(
LdapOperations
.
class
)
@ConditionalOnBean
(
LdapOperations
.
class
)
@ConditionalOnEnabledHealthIndicator
(
"ldap"
)
public
static
class
LdapHealthIndicatorConfiguration
extends
CompositeHealthIndicatorConfiguration
<
LdapHealthIndicator
,
LdapOperations
>
{
private
final
Map
<
String
,
LdapOperations
>
ldapOperations
;
public
LdapHealthIndicatorConfiguration
(
Map
<
String
,
LdapOperations
>
ldapOperations
)
{
this
.
ldapOperations
=
ldapOperations
;
}
@Bean
@ConditionalOnMissingBean
(
name
=
"ldapHealthIndicator"
)
public
HealthIndicator
ldapHealthIndicator
()
{
return
createHealthIndicator
(
this
.
ldapOperations
);
}
}
@Configuration
@Configuration
@ConditionalOnBean
(
MongoTemplate
.
class
)
@ConditionalOnBean
(
MongoTemplate
.
class
)
@ConditionalOnEnabledHealthIndicator
(
"mongo"
)
@ConditionalOnEnabledHealthIndicator
(
"mongo"
)
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/health/LdapHealthIndicator.java
0 → 100644
View file @
ad77b655
/*
* Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
actuate
.
health
;
import
javax.naming.NamingException
;
import
javax.naming.directory.DirContext
;
import
org.springframework.ldap.core.ContextExecutor
;
import
org.springframework.ldap.core.LdapOperations
;
import
org.springframework.util.Assert
;
/**
* {@link HealthIndicator} for configured LDAP server(s).
*
* @author Eddú Meléndez
* @author Stephane Nicoll
* @version 1.5.0
*/
public
class
LdapHealthIndicator
extends
AbstractHealthIndicator
{
private
static
final
ContextExecutor
<
String
>
versionContextExecutor
=
new
VersionContextExecutor
();
private
final
LdapOperations
ldapOperations
;
public
LdapHealthIndicator
(
LdapOperations
ldapOperations
)
{
Assert
.
notNull
(
ldapOperations
,
"LdapOperations must not be null"
);
this
.
ldapOperations
=
ldapOperations
;
}
@Override
protected
void
doHealthCheck
(
Health
.
Builder
builder
)
throws
Exception
{
String
version
=
this
.
ldapOperations
.
executeReadOnly
(
versionContextExecutor
);
builder
.
up
().
withDetail
(
"version"
,
version
);
}
private
static
class
VersionContextExecutor
implements
ContextExecutor
<
String
>
{
@Override
public
String
executeWithContext
(
DirContext
ctx
)
throws
NamingException
{
Object
version
=
ctx
.
getEnvironment
().
get
(
"java.naming.ldap.version"
);
if
(
version
!=
null
)
{
return
(
String
)
version
;
}
return
null
;
}
}
}
spring-boot-actuator/src/main/resources/META-INF/additional-spring-configuration-metadata.json
View file @
ad77b655
...
@@ -139,6 +139,12 @@
...
@@ -139,6 +139,12 @@
"description"
:
"Enable JMS health check."
,
"description"
:
"Enable JMS health check."
,
"defaultValue"
:
true
"defaultValue"
:
true
},
},
{
"name"
:
"management.health.ldap.enabled"
,
"type"
:
"java.lang.Boolean"
,
"description"
:
"Enable LDAP health check."
,
"defaultValue"
:
true
},
{
{
"name"
:
"management.health.mongo.enabled"
,
"name"
:
"management.health.mongo.enabled"
,
"type"
:
"java.lang.Boolean"
,
"type"
:
"java.lang.Boolean"
,
...
...
spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/HealthIndicatorAutoConfigurationTests.java
View file @
ad77b655
/*
/*
* Copyright 2012-201
6
the original author or authors.
* Copyright 2012-201
7
the original author or authors.
*
*
* Licensed under the Apache License, Version 2.0 (the "License");
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* you may not use this file except in compliance with the License.
...
@@ -35,6 +35,7 @@ import org.springframework.boot.actuate.health.ElasticsearchJestHealthIndicator;
...
@@ -35,6 +35,7 @@ import org.springframework.boot.actuate.health.ElasticsearchJestHealthIndicator;
import
org.springframework.boot.actuate.health.Health
;
import
org.springframework.boot.actuate.health.Health
;
import
org.springframework.boot.actuate.health.HealthIndicator
;
import
org.springframework.boot.actuate.health.HealthIndicator
;
import
org.springframework.boot.actuate.health.JmsHealthIndicator
;
import
org.springframework.boot.actuate.health.JmsHealthIndicator
;
import
org.springframework.boot.actuate.health.LdapHealthIndicator
;
import
org.springframework.boot.actuate.health.MailHealthIndicator
;
import
org.springframework.boot.actuate.health.MailHealthIndicator
;
import
org.springframework.boot.actuate.health.MongoHealthIndicator
;
import
org.springframework.boot.actuate.health.MongoHealthIndicator
;
import
org.springframework.boot.actuate.health.RabbitHealthIndicator
;
import
org.springframework.boot.actuate.health.RabbitHealthIndicator
;
...
@@ -63,6 +64,7 @@ import org.springframework.context.annotation.Configuration;
...
@@ -63,6 +64,7 @@ import org.springframework.context.annotation.Configuration;
import
org.springframework.data.cassandra.core.CassandraOperations
;
import
org.springframework.data.cassandra.core.CassandraOperations
;
import
org.springframework.data.couchbase.core.CouchbaseOperations
;
import
org.springframework.data.couchbase.core.CouchbaseOperations
;
import
org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
;
import
org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource
;
import
org.springframework.ldap.core.LdapOperations
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
mock
;
...
@@ -535,6 +537,35 @@ public class HealthIndicatorAutoConfigurationTests {
...
@@ -535,6 +537,35 @@ public class HealthIndicatorAutoConfigurationTests {
.
isEqualTo
(
ApplicationHealthIndicator
.
class
);
.
isEqualTo
(
ApplicationHealthIndicator
.
class
);
}
}
@Test
public
void
ldapHealthIndicator
()
throws
Exception
{
EnvironmentTestUtils
.
addEnvironment
(
this
.
context
,
"management.health.diskspace.enabled:false"
);
this
.
context
.
register
(
LdapConfiguration
.
class
,
ManagementServerProperties
.
class
,
HealthIndicatorAutoConfiguration
.
class
);
this
.
context
.
refresh
();
Map
<
String
,
HealthIndicator
>
beans
=
this
.
context
.
getBeansOfType
(
HealthIndicator
.
class
);
assertThat
(
beans
.
size
()).
isEqualTo
(
1
);
assertThat
(
beans
.
values
().
iterator
().
next
().
getClass
())
.
isEqualTo
(
LdapHealthIndicator
.
class
);
}
@Test
public
void
notLdapHealthIndicator
()
throws
Exception
{
EnvironmentTestUtils
.
addEnvironment
(
this
.
context
,
"management.health.diskspace.enabled:false"
,
"management.health.ldap.enabled:false"
);
this
.
context
.
register
(
LdapConfiguration
.
class
,
ManagementServerProperties
.
class
,
HealthIndicatorAutoConfiguration
.
class
);
this
.
context
.
refresh
();
Map
<
String
,
HealthIndicator
>
beans
=
this
.
context
.
getBeansOfType
(
HealthIndicator
.
class
);
assertThat
(
beans
.
size
()).
isEqualTo
(
1
);
assertThat
(
beans
.
values
().
iterator
().
next
().
getClass
())
.
isEqualTo
(
ApplicationHealthIndicator
.
class
);
}
@Configuration
@Configuration
@EnableConfigurationProperties
@EnableConfigurationProperties
protected
static
class
DataSourceConfig
{
protected
static
class
DataSourceConfig
{
...
@@ -605,4 +636,14 @@ public class HealthIndicatorAutoConfigurationTests {
...
@@ -605,4 +636,14 @@ public class HealthIndicatorAutoConfigurationTests {
}
}
@Configuration
protected
static
class
LdapConfiguration
{
@Bean
public
LdapOperations
ldapOperations
()
{
return
mock
(
LdapOperations
.
class
);
}
}
}
}
spring-boot-actuator/src/test/java/org/springframework/boot/actuate/health/LdapHealthIndicatorTests.java
0 → 100644
View file @
ad77b655
/*
* Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org
.
springframework
.
boot
.
actuate
.
health
;
import
org.junit.After
;
import
org.junit.Before
;
import
org.junit.Test
;
import
org.springframework.boot.actuate.autoconfigure.EndpointAutoConfiguration
;
import
org.springframework.boot.actuate.autoconfigure.HealthIndicatorAutoConfiguration
;
import
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration
;
import
org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration
;
import
org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration
;
import
org.springframework.context.annotation.AnnotationConfigApplicationContext
;
import
org.springframework.ldap.CommunicationException
;
import
org.springframework.ldap.core.ContextExecutor
;
import
org.springframework.ldap.core.LdapTemplate
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
static
org
.
mockito
.
BDDMockito
.
given
;
import
static
org
.
mockito
.
Matchers
.
any
;
import
static
org
.
mockito
.
Mockito
.
mock
;
import
static
org
.
mockito
.
Mockito
.
verify
;
/**
* Tests for {@link LdapHealthIndicator}
*
* @author Eddú Meléndez
*/
public
class
LdapHealthIndicatorTests
{
private
AnnotationConfigApplicationContext
context
;
@Before
public
void
setup
()
{
this
.
context
=
new
AnnotationConfigApplicationContext
();
}
@After
public
void
close
()
{
if
(
this
.
context
!=
null
)
{
this
.
context
.
close
();
}
}
@Test
public
void
indicatorExist
()
{
this
.
context
.
register
(
LdapAutoConfiguration
.
class
,
LdapDataAutoConfiguration
.
class
,
PropertyPlaceholderAutoConfiguration
.
class
,
EndpointAutoConfiguration
.
class
,
HealthIndicatorAutoConfiguration
.
class
);
this
.
context
.
refresh
();
LdapTemplate
ldapTemplate
=
this
.
context
.
getBean
(
LdapTemplate
.
class
);
assertThat
(
ldapTemplate
).
isNotNull
();
LdapHealthIndicator
healthIndicator
=
this
.
context
.
getBean
(
LdapHealthIndicator
.
class
);
assertThat
(
healthIndicator
).
isNotNull
();
}
@Test
public
void
ldapIsUp
()
{
LdapTemplate
ldapTemplate
=
mock
(
LdapTemplate
.
class
);
given
(
ldapTemplate
.
executeReadOnly
(
any
(
ContextExecutor
.
class
))).
willReturn
(
"3"
);
LdapHealthIndicator
healthIndicator
=
new
LdapHealthIndicator
(
ldapTemplate
);
Health
health
=
healthIndicator
.
health
();
assertThat
(
health
.
getStatus
()).
isEqualTo
(
Status
.
UP
);
assertThat
(
health
.
getDetails
().
get
(
"version"
)).
isEqualTo
(
"3"
);
verify
(
ldapTemplate
).
executeReadOnly
(
any
(
ContextExecutor
.
class
));
}
@Test
public
void
ldapIsDown
()
{
LdapTemplate
ldapTemplate
=
mock
(
LdapTemplate
.
class
);
given
(
ldapTemplate
.
executeReadOnly
(
any
(
ContextExecutor
.
class
)))
.
willThrow
(
new
CommunicationException
(
new
javax
.
naming
.
CommunicationException
(
"Connection failed"
)));
LdapHealthIndicator
healthIndicator
=
new
LdapHealthIndicator
(
ldapTemplate
);
Health
health
=
healthIndicator
.
health
();
assertThat
(
health
.
getStatus
()).
isEqualTo
(
Status
.
DOWN
);
assertThat
((
String
)
health
.
getDetails
().
get
(
"error"
))
.
contains
(
"Connection failed"
);
verify
(
ldapTemplate
).
executeReadOnly
(
any
(
ContextExecutor
.
class
));
}
}
spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc
View file @
ad77b655
...
@@ -1114,6 +1114,7 @@ content into your application; rather pick only the properties that you need.
...
@@ -1114,6 +1114,7 @@ content into your application; rather pick only the properties that you need.
management.health.elasticsearch.indices= # Comma-separated index names.
management.health.elasticsearch.indices= # Comma-separated index names.
management.health.elasticsearch.response-timeout=100 # The time, in milliseconds, to wait for a response from the cluster.
management.health.elasticsearch.response-timeout=100 # The time, in milliseconds, to wait for a response from the cluster.
management.health.jms.enabled=true # Enable JMS health check.
management.health.jms.enabled=true # Enable JMS health check.
management.health.ldap.enabled=true # Enable LDAP health check.
management.health.mail.enabled=true # Enable Mail health check.
management.health.mail.enabled=true # Enable Mail health check.
management.health.mongo.enabled=true # Enable MongoDB health check.
management.health.mongo.enabled=true # Enable MongoDB health check.
management.health.rabbit.enabled=true # Enable RabbitMQ health check.
management.health.rabbit.enabled=true # Enable RabbitMQ health check.
...
...
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