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
d784cb6a
Commit
d784cb6a
authored
Nov 04, 2013
by
Phillip Webb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Apply eclipse-formatter conventions
parent
0def4477
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
239 additions
and
235 deletions
+239
-235
CrshAutoConfiguration.java
...ork/boot/actuate/autoconfigure/CrshAutoConfiguration.java
+97
-101
CrshProperties.java
...ringframework/boot/actuate/properties/CrshProperties.java
+39
-48
CrshAutoConfigurationTests.java
...oot/actuate/autoconfigure/CrshAutoConfigurationTests.java
+51
-38
CrshPropertiesTests.java
...ramework/boot/actuate/properties/CrshPropertiesTests.java
+48
-43
DataSourceAutoConfigurationTests.java
.../autoconfigure/jdbc/DataSourceAutoConfigurationTests.java
+4
-5
No files found.
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/CrshAutoConfiguration.java
View file @
d784cb6a
...
...
@@ -74,25 +74,27 @@ import org.springframework.util.ClassUtils;
import
org.springframework.util.StringUtils
;
/**
* {@link EnableAutoConfiguration Auto-configuration} for embedding an extensible shell into a Spring
* Boot enabled application. By default a SSH daemon is started on port 2000 with a default username
* <code>user</code> and password (default password is logged during application startup).
* {@link EnableAutoConfiguration Auto-configuration} for embedding an extensible shell
* into a Spring Boot enabled application. By default a SSH daemon is started on port 2000
* with a default username <code>user</code> and password (default password is logged
* during application startup).
*
* <p>
* This configuration will auto detect the existence of a Spring Security {@link AuthenticationManager}
* and will delegate authentication requests for shell access to this detected instance.
* This configuration will auto detect the existence of a Spring Security
* {@link AuthenticationManager} and will delegate authentication requests for shell
* access to this detected instance.
*
* <p>
* To add customizations to the shell simply define beans of type {@link CRaSHPlugin} in
the
*
application context. Those beans will get auto detected during startup and registered with the
* underlying shell infrastructure.
* To add customizations to the shell simply define beans of type {@link CRaSHPlugin} in
*
the application context. Those beans will get auto detected during startup and
*
registered with the
underlying shell infrastructure.
*
* <p>
* Additional shell commands can be implemented using the guide and documentation at
*
<a href="http://www.crashub.org">crashub.org</a>. By default Boot will search for commands using
*
the following classpath scanning pattern <code>classpath*:/commands/**</code>. To add different
*
locations or override the default use <code>shell.command_path_patterns</code> in your application
* configuration.
* Additional shell commands can be implemented using the guide and documentation at
<a
*
href="http://www.crashub.org">crashub.org</a>. By default Boot will search for commands
*
using the following classpath scanning pattern <code>classpath*:/commands/**</code>. To
*
add different locations or override the default use
*
<code>shell.command_path_patterns</code> in your application
configuration.
*
* @author Christian Dupuis
*/
...
...
@@ -105,7 +107,6 @@ public class CrshAutoConfiguration {
@Autowired
private
CrshProperties
properties
;
@Bean
@ConditionalOnExpression
(
"#{environment['shell.auth'] == 'jaas'}"
)
@ConditionalOnMissingBean
({
AuthenticationProperties
.
class
})
...
...
@@ -144,11 +145,10 @@ public class CrshAutoConfiguration {
@ConditionalOnMissingBean
({
PluginLifeCycle
.
class
})
public
PluginLifeCycle
shellBootstrap
()
{
CrshBootstrap
bs
=
new
CrshBootstrap
();
bs
.
setConfig
(
properties
.
mergeProperties
(
new
Properties
()));
bs
.
setConfig
(
this
.
properties
.
mergeProperties
(
new
Properties
()));
return
bs
;
}
public
static
class
CrshBootstrap
extends
PluginLifeCycle
{
@Autowired
...
...
@@ -160,7 +160,6 @@ public class CrshAutoConfiguration {
@Autowired
private
ResourcePatternResolver
resourceLoader
;
@PreDestroy
public
void
destroy
()
{
stop
();
...
...
@@ -168,54 +167,58 @@ public class CrshAutoConfiguration {
@PostConstruct
public
void
init
()
throws
Exception
{
FS
commandFileSystem
=
createFileSystem
(
properties
.
getCommandPathPatterns
());
FS
confFileSystem
=
createFileSystem
(
properties
.
getConfigPathPatterns
());
FS
commandFileSystem
=
createFileSystem
(
this
.
properties
.
getCommandPathPatterns
());
FS
confFileSystem
=
createFileSystem
(
this
.
properties
.
getConfigPathPatterns
());
PluginDiscovery
discovery
=
new
BeanFactoryFilteringPluginDiscovery
(
resourceLoader
.
getClassLoader
(),
beanFactory
,
properties
.
getDisabledPlugins
());
PluginDiscovery
discovery
=
new
BeanFactoryFilteringPluginDiscovery
(
this
.
resourceLoader
.
getClassLoader
(),
this
.
beanFactory
,
this
.
properties
.
getDisabledPlugins
());
PluginContext
context
=
new
PluginContext
(
discovery
,
createPluginContextAttributes
(),
commandFileSystem
,
confFileSystem
,
resourceLoader
.
getClassLoader
());
PluginContext
context
=
new
PluginContext
(
discovery
,
createPluginContextAttributes
(),
commandFileSystem
,
confFileSystem
,
this
.
resourceLoader
.
getClassLoader
());
context
.
refresh
();
start
(
context
);
}
protected
FS
createFileSystem
(
String
[]
pathPatterns
)
throws
IOException
,
URISyntaxException
{
protected
FS
createFileSystem
(
String
[]
pathPatterns
)
throws
IOException
,
URISyntaxException
{
Assert
.
notNull
(
pathPatterns
);
FS
cmdFS
=
new
FS
();
for
(
String
pathPattern
:
pathPatterns
)
{
cmdFS
.
mount
(
new
SimpleFileSystemDriver
(
new
DirectoryHandle
(
pathPattern
,
resourceLoader
)));
cmdFS
.
mount
(
new
SimpleFileSystemDriver
(
new
DirectoryHandle
(
pathPattern
,
this
.
resourceLoader
)));
}
return
cmdFS
;
}
protected
Map
<
String
,
Object
>
createPluginContextAttributes
()
{
Map
<
String
,
Object
>
attributes
=
new
HashMap
<
String
,
Object
>();
String
bootVersion
=
CrshAutoConfiguration
.
class
.
getPackage
().
getImplementationVersion
();
String
bootVersion
=
CrshAutoConfiguration
.
class
.
getPackage
()
.
getImplementationVersion
();
if
(
bootVersion
!=
null
)
{
attributes
.
put
(
"spring.boot.version"
,
bootVersion
);
}
attributes
.
put
(
"spring.version"
,
SpringVersion
.
getVersion
());
if
(
beanFactory
!=
null
)
{
attributes
.
put
(
"spring.beanfactory"
,
beanFactory
);
if
(
this
.
beanFactory
!=
null
)
{
attributes
.
put
(
"spring.beanfactory"
,
this
.
beanFactory
);
}
return
attributes
;
}
}
@SuppressWarnings
(
"rawtypes"
)
private
static
class
AuthenticationManagerAdapter
extends
CRaSHPlugin
<
AuthenticationPlugin
>
implements
AuthenticationPlugin
<
String
>
{
private
static
final
PropertyDescriptor
<
String
>
ROLES
=
PropertyDescriptor
.
create
(
"auth.spring.roles"
,
"ADMIN"
,
"Comma separated list of roles required to access the shell"
);
private
static
class
AuthenticationManagerAdapter
extends
CRaSHPlugin
<
AuthenticationPlugin
>
implements
AuthenticationPlugin
<
String
>
{
private
static
final
PropertyDescriptor
<
String
>
ROLES
=
PropertyDescriptor
.
create
(
"auth.spring.roles"
,
"ADMIN"
,
"Comma separated list of roles required to access the shell"
);
@Autowired
(
required
=
false
)
@Autowired
(
required
=
false
)
private
AccessDecisionManager
accessDecisionManager
;
@Autowired
...
...
@@ -223,22 +226,24 @@ public class CrshAutoConfiguration {
private
String
[]
roles
=
new
String
[]
{
"ROLE_ADMIN"
};
@Override
public
boolean
authenticate
(
String
username
,
String
password
)
throws
Exception
{
// Authenticate first to make credentials are valid
Authentication
token
=
new
UsernamePasswordAuthenticationToken
(
username
,
password
);
Authentication
token
=
new
UsernamePasswordAuthenticationToken
(
username
,
password
);
try
{
token
=
authenticationManager
.
authenticate
(
token
);
token
=
this
.
authenticationManager
.
authenticate
(
token
);
}
catch
(
AuthenticationException
ae
)
{
return
false
;
}
// Test access rights if a Spring Security AccessDecisionManager is installed
if
(
accessDecisionManager
!=
null
&&
token
.
isAuthenticated
()
&&
roles
!=
null
)
{
if
(
this
.
accessDecisionManager
!=
null
&&
token
.
isAuthenticated
()
&&
this
.
roles
!=
null
)
{
try
{
accessDecisionManager
.
decide
(
token
,
this
,
SecurityConfig
.
createList
(
roles
));
this
.
accessDecisionManager
.
decide
(
token
,
this
,
SecurityConfig
.
createList
(
this
.
roles
));
}
catch
(
AccessDeniedException
e
)
{
return
false
;
...
...
@@ -266,35 +271,33 @@ public class CrshAutoConfiguration {
public
void
init
()
{
String
rolesPropertyValue
=
getContext
().
getProperty
(
ROLES
);
if
(
rolesPropertyValue
!=
null
)
{
this
.
roles
=
StringUtils
.
commaDelimitedListToStringArray
(
rolesPropertyValue
);
this
.
roles
=
StringUtils
.
commaDelimitedListToStringArray
(
rolesPropertyValue
);
}
}
@Override
protected
Iterable
<
PropertyDescriptor
<?>>
createConfigurationCapabilities
()
{
return
Arrays
.<
PropertyDescriptor
<?>>
asList
(
ROLES
);
return
Arrays
.<
PropertyDescriptor
<?>>
asList
(
ROLES
);
}
}
private
static
class
BeanFactoryFilteringPluginDiscovery
extends
ServiceLoaderDiscovery
{
private
static
class
BeanFactoryFilteringPluginDiscovery
extends
ServiceLoaderDiscovery
{
private
ListableBeanFactory
beanFactory
;
private
String
[]
disabledPlugins
;
public
BeanFactoryFilteringPluginDiscovery
(
ClassLoader
classLoader
,
ListableBeanFactory
beanFactory
,
String
[]
disabledPlugins
)
public
BeanFactoryFilteringPluginDiscovery
(
ClassLoader
classLoader
,
ListableBeanFactory
beanFactory
,
String
[]
disabledPlugins
)
throws
NullPointerException
{
super
(
classLoader
);
this
.
beanFactory
=
beanFactory
;
this
.
disabledPlugins
=
disabledPlugins
;
}
@Override
@SuppressWarnings
(
"rawtypes"
)
public
Iterable
<
CRaSHPlugin
<?>>
getPlugins
()
{
...
...
@@ -306,7 +309,8 @@ public class CrshAutoConfiguration {
}
}
Collection
<
CRaSHPlugin
>
springPlugins
=
beanFactory
.
getBeansOfType
(
CRaSHPlugin
.
class
).
values
();
Collection
<
CRaSHPlugin
>
springPlugins
=
this
.
beanFactory
.
getBeansOfType
(
CRaSHPlugin
.
class
).
values
();
for
(
CRaSHPlugin
<?>
p
:
springPlugins
)
{
if
(!
shouldFilter
(
p
))
{
plugins
.
add
(
p
);
...
...
@@ -316,7 +320,6 @@ public class CrshAutoConfiguration {
return
plugins
;
}
@SuppressWarnings
(
"rawtypes"
)
protected
boolean
shouldFilter
(
CRaSHPlugin
<?>
plugin
)
{
Assert
.
notNull
(
plugin
);
...
...
@@ -325,10 +328,12 @@ public class CrshAutoConfiguration {
classes
.
add
(
plugin
.
getClass
());
for
(
Class
<?>
clazz
:
classes
)
{
if
(
disabledPlugins
!=
null
&&
disabledPlugins
.
length
>
0
)
{
for
(
String
disabledPlugin
:
disabledPlugins
)
{
if
(
ClassUtils
.
getShortName
(
clazz
).
equalsIgnoreCase
(
disabledPlugin
)
||
ClassUtils
.
getQualifiedName
(
clazz
).
equalsIgnoreCase
(
disabledPlugin
))
{
if
(
this
.
disabledPlugins
!=
null
&&
this
.
disabledPlugins
.
length
>
0
)
{
for
(
String
disabledPlugin
:
this
.
disabledPlugins
)
{
if
(
ClassUtils
.
getShortName
(
clazz
).
equalsIgnoreCase
(
disabledPlugin
)
||
ClassUtils
.
getQualifiedName
(
clazz
).
equalsIgnoreCase
(
disabledPlugin
))
{
return
true
;
}
}
...
...
@@ -339,19 +344,17 @@ public class CrshAutoConfiguration {
}
private
static
class
SimpleFileSystemDriver
extends
AbstractFSDriver
<
ResourceHandle
>
{
private
ResourceHandle
root
;
public
SimpleFileSystemDriver
(
ResourceHandle
handle
)
{
this
.
root
=
handle
;
}
@Override
public
Iterable
<
ResourceHandle
>
children
(
ResourceHandle
handle
)
throws
IOException
{
public
Iterable
<
ResourceHandle
>
children
(
ResourceHandle
handle
)
throws
IOException
{
if
(
handle
instanceof
DirectoryHandle
)
{
return
((
DirectoryHandle
)
handle
).
members
();
}
...
...
@@ -379,32 +382,30 @@ public class CrshAutoConfiguration {
@Override
public
Iterator
<
InputStream
>
open
(
ResourceHandle
handle
)
throws
IOException
{
if
(
handle
instanceof
FileHandle
)
{
return
Collections
.
singletonList
(((
FileHandle
)
handle
).
openStream
()).
iterator
();
return
Collections
.
singletonList
(((
FileHandle
)
handle
).
openStream
())
.
iterator
();
}
return
Collections
.<
InputStream
>
emptyList
().
iterator
();
return
Collections
.<
InputStream
>
emptyList
().
iterator
();
}
@Override
public
ResourceHandle
root
()
throws
IOException
{
return
root
;
return
this
.
root
;
}
}
private
static
class
DirectoryHandle
extends
ResourceHandle
{
private
ResourcePatternResolver
resourceLoader
;
public
DirectoryHandle
(
String
name
,
ResourcePatternResolver
resourceLoader
)
{
super
(
name
);
this
.
resourceLoader
=
resourceLoader
;
}
public
List
<
ResourceHandle
>
members
()
throws
IOException
{
Resource
[]
resources
=
resourceLoader
.
getResources
(
getName
());
Resource
[]
resources
=
this
.
resourceLoader
.
getResources
(
getName
());
List
<
ResourceHandle
>
files
=
new
ArrayList
<
ResourceHandle
>();
for
(
Resource
resource
:
resources
)
{
if
(!
resource
.
getURL
().
getPath
().
endsWith
(
"/"
))
{
...
...
@@ -416,18 +417,15 @@ public class CrshAutoConfiguration {
}
private
static
class
FileHandle
extends
ResourceHandle
{
private
Resource
resource
;
public
FileHandle
(
String
name
,
Resource
resource
)
{
super
(
name
);
this
.
resource
=
resource
;
}
public
InputStream
openStream
()
throws
IOException
{
return
this
.
resource
.
getInputStream
();
}
...
...
@@ -436,25 +434,23 @@ public class CrshAutoConfiguration {
try
{
return
this
.
resource
.
lastModified
();
}
catch
(
IOException
e
)
{}
catch
(
IOException
e
)
{
}
return
-
1
;
}
}
private
abstract
static
class
ResourceHandle
{
private
String
name
;
public
ResourceHandle
(
String
name
)
{
this
.
name
=
name
;
}
public
String
getName
()
{
return
name
;
return
this
.
name
;
}
}
...
...
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/properties/CrshProperties.java
View file @
d784cb6a
...
...
@@ -66,7 +66,6 @@ public class CrshProperties {
private
Telnet
telnet
=
new
Telnet
();
public
String
getAuth
()
{
return
this
.
auth
;
}
...
...
@@ -100,24 +99,25 @@ public class CrshProperties {
}
public
Properties
mergeProperties
(
Properties
properties
)
{
properties
=
ssh
.
mergeProperties
(
properties
);
properties
=
telnet
.
mergeProperties
(
properties
);
properties
=
this
.
ssh
.
mergeProperties
(
properties
);
properties
=
t
his
.
t
elnet
.
mergeProperties
(
properties
);
properties
.
put
(
CRASH_AUTH
,
auth
);
if
(
authenticationProperties
!=
null
)
{
properties
=
authenticationProperties
.
mergeProperties
(
properties
);
properties
.
put
(
CRASH_AUTH
,
this
.
auth
);
if
(
this
.
authenticationProperties
!=
null
)
{
properties
=
this
.
authenticationProperties
.
mergeProperties
(
properties
);
}
if
(
this
.
commandRefreshInterval
>
0
)
{
properties
.
put
(
CRASH_VFS_REFRESH_PERIOD
,
String
.
valueOf
(
this
.
commandRefreshInterval
));
properties
.
put
(
CRASH_VFS_REFRESH_PERIOD
,
String
.
valueOf
(
this
.
commandRefreshInterval
));
}
// special handling for disabling Ssh and Telnet support
List
<
String
>
dp
=
new
ArrayList
<
String
>(
Arrays
.
asList
(
this
.
disabledPlugins
));
if
(!
ssh
.
isEnabled
())
{
if
(!
this
.
ssh
.
isEnabled
())
{
dp
.
add
(
"org.crsh.ssh.SSHPlugin"
);
}
if
(!
telnet
.
isEnabled
())
{
if
(!
t
his
.
t
elnet
.
isEnabled
())
{
dp
.
add
(
"org.crsh.telnet.TelnetPlugin"
);
}
this
.
disabledPlugins
=
dp
.
toArray
(
new
String
[
dp
.
size
()]);
...
...
@@ -130,7 +130,8 @@ public class CrshProperties {
this
.
auth
=
auth
;
}
public
void
setAuthenticationProperties
(
AuthenticationProperties
authenticationProperties
)
{
public
void
setAuthenticationProperties
(
AuthenticationProperties
authenticationProperties
)
{
Assert
.
notNull
(
authenticationProperties
);
this
.
authenticationProperties
=
authenticationProperties
;
}
...
...
@@ -164,17 +165,14 @@ public class CrshProperties {
this
.
telnet
=
telnet
;
}
public
interface
AuthenticationProperties
extends
PropertiesProvider
{
}
@ConfigurationProperties
(
name
=
"shell.auth.jaas"
,
ignoreUnknownFields
=
false
)
public
static
class
JaasAuthenticationProperties
implements
AuthenticationProperties
{
private
String
domain
=
"my-domain"
;
@Override
public
Properties
mergeProperties
(
Properties
properties
)
{
properties
.
put
(
CRASH_AUTH_JAAS_DOMAIN
,
this
.
domain
);
...
...
@@ -188,13 +186,11 @@ public class CrshProperties {
}
@ConfigurationProperties
(
name
=
"shell.auth.key"
,
ignoreUnknownFields
=
false
)
public
static
class
KeyAuthenticationProperties
implements
AuthenticationProperties
{
private
String
path
;
@Override
public
Properties
mergeProperties
(
Properties
properties
)
{
if
(
this
.
path
!=
null
)
{
...
...
@@ -210,17 +206,16 @@ public class CrshProperties {
}
public
interface
PropertiesProvider
{
Properties
mergeProperties
(
Properties
properties
);
}
@ConfigurationProperties
(
name
=
"shell.auth.simple"
,
ignoreUnknownFields
=
false
)
public
static
class
SimpleAuthenticationProperties
implements
AuthenticationProperties
{
private
static
Log
logger
=
LogFactory
.
getLog
(
SimpleAuthenticationProperties
.
class
);
public
static
class
SimpleAuthenticationProperties
implements
AuthenticationProperties
{
private
static
Log
logger
=
LogFactory
.
getLog
(
SimpleAuthenticationProperties
.
class
);
private
String
username
=
"user"
;
...
...
@@ -228,7 +223,6 @@ public class CrshProperties {
private
boolean
defaultPassword
=
true
;
public
boolean
isDefaultPassword
()
{
return
this
.
defaultPassword
;
}
...
...
@@ -244,7 +238,8 @@ public class CrshProperties {
}
public
void
setPassword
(
String
password
)
{
if
(
password
.
startsWith
(
"${"
)
&&
password
.
endsWith
(
"}"
)
||
!
StringUtils
.
hasLength
(
password
))
{
if
(
password
.
startsWith
(
"${"
)
&&
password
.
endsWith
(
"}"
)
||
!
StringUtils
.
hasLength
(
password
))
{
return
;
}
this
.
password
=
password
;
...
...
@@ -258,17 +253,17 @@ public class CrshProperties {
}
@ConfigurationProperties
(
name
=
"shell.auth.spring"
,
ignoreUnknownFields
=
false
)
public
static
class
SpringAuthenticationProperties
implements
AuthenticationProperties
{
public
static
class
SpringAuthenticationProperties
implements
AuthenticationProperties
{
private
String
[]
roles
=
new
String
[]
{
"ROLE_ADMIN"
};
@Override
public
Properties
mergeProperties
(
Properties
properties
)
{
if
(
this
.
roles
!=
null
)
{
properties
.
put
(
CRASH_AUTH_SPRING_ROLES
,
StringUtils
.
arrayToCommaDelimitedString
(
this
.
roles
));
properties
.
put
(
CRASH_AUTH_SPRING_ROLES
,
StringUtils
.
arrayToCommaDelimitedString
(
this
.
roles
));
}
return
properties
;
}
...
...
@@ -280,7 +275,6 @@ public class CrshProperties {
}
public
static
class
Ssh
implements
PropertiesProvider
{
private
boolean
enabled
=
true
;
...
...
@@ -289,7 +283,6 @@ public class CrshProperties {
private
String
port
=
"2000"
;
public
boolean
isEnabled
()
{
return
this
.
enabled
;
}
...
...
@@ -321,14 +314,12 @@ public class CrshProperties {
}
public
static
class
Telnet
implements
PropertiesProvider
{
private
boolean
enabled
=
false
;
private
String
port
=
"5000"
;
public
boolean
isEnabled
()
{
return
this
.
enabled
;
}
...
...
spring-boot-actuator/src/test/java/org/springframework/boot/actuate/autoconfigure/CrshAutoConfigurationTests.java
View file @
d784cb6a
...
...
@@ -16,13 +16,6 @@
package
org
.
springframework
.
boot
.
actuate
.
autoconfigure
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
static
org
.
junit
.
Assert
.
fail
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.Iterator
;
...
...
@@ -56,6 +49,13 @@ import org.springframework.security.core.AuthenticationException;
import
org.springframework.security.core.authority.SimpleGrantedAuthority
;
import
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
static
org
.
junit
.
Assert
.
fail
;
/**
* Tests for {@link CrshAutoConfiguration}.
*
...
...
@@ -77,7 +77,8 @@ public class CrshAutoConfigurationTests {
@Test
public
void
testDisabledPlugins
()
throws
Exception
{
MockEnvironment
env
=
new
MockEnvironment
();
env
.
setProperty
(
"shell.disabled_plugins"
,
"GroovyREPL, termIOHandler, org.crsh.auth.AuthenticationPlugin"
);
env
.
setProperty
(
"shell.disabled_plugins"
,
"GroovyREPL, termIOHandler, org.crsh.auth.AuthenticationPlugin"
);
this
.
context
=
new
AnnotationConfigWebApplicationContext
();
this
.
context
.
setEnvironment
(
env
);
this
.
context
.
register
(
CrshAutoConfiguration
.
class
);
...
...
@@ -132,7 +133,8 @@ public class CrshAutoConfigurationTests {
PluginLifeCycle
lifeCycle
=
this
.
context
.
getBean
(
PluginLifeCycle
.
class
);
assertEquals
(
lifeCycle
.
getConfig
().
getProperty
(
"crash.ssh.keypath"
),
"~/.ssh/id.pem"
);
assertEquals
(
lifeCycle
.
getConfig
().
getProperty
(
"crash.ssh.keypath"
),
"~/.ssh/id.pem"
);
}
@Test
...
...
@@ -144,7 +146,8 @@ public class CrshAutoConfigurationTests {
PluginLifeCycle
lifeCycle
=
this
.
context
.
getBean
(
PluginLifeCycle
.
class
);
int
count
=
0
;
Iterator
<
Resource
>
resources
=
lifeCycle
.
getContext
().
loadResources
(
"login"
,
ResourceKind
.
LIFECYCLE
).
iterator
();
Iterator
<
Resource
>
resources
=
lifeCycle
.
getContext
()
.
loadResources
(
"login"
,
ResourceKind
.
LIFECYCLE
).
iterator
();
while
(
resources
.
hasNext
())
{
count
++;
resources
.
next
();
...
...
@@ -152,7 +155,8 @@ public class CrshAutoConfigurationTests {
assertEquals
(
1
,
count
);
count
=
0
;
resources
=
lifeCycle
.
getContext
().
loadResources
(
"help.java"
,
ResourceKind
.
COMMAND
).
iterator
();
resources
=
lifeCycle
.
getContext
()
.
loadResources
(
"help.java"
,
ResourceKind
.
COMMAND
).
iterator
();
while
(
resources
.
hasNext
())
{
count
++;
resources
.
next
();
...
...
@@ -172,7 +176,8 @@ public class CrshAutoConfigurationTests {
PluginContext
pluginContext
=
lifeCycle
.
getContext
();
int
count
=
0
;
Iterator
<
AuthenticationPlugin
>
plugins
=
pluginContext
.
getPlugins
(
AuthenticationPlugin
.
class
).
iterator
();
Iterator
<
AuthenticationPlugin
>
plugins
=
pluginContext
.
getPlugins
(
AuthenticationPlugin
.
class
).
iterator
();
while
(
plugins
.
hasNext
())
{
count
++;
plugins
.
next
();
...
...
@@ -194,7 +199,8 @@ public class CrshAutoConfigurationTests {
PluginLifeCycle
lifeCycle
=
this
.
context
.
getBean
(
PluginLifeCycle
.
class
);
assertEquals
(
lifeCycle
.
getConfig
().
get
(
"crash.auth"
),
"jaas"
);
assertEquals
(
lifeCycle
.
getConfig
().
get
(
"crash.auth.jaas.domain"
),
"my-test-domain"
);
assertEquals
(
lifeCycle
.
getConfig
().
get
(
"crash.auth.jaas.domain"
),
"my-test-domain"
);
}
@Test
...
...
@@ -233,7 +239,8 @@ public class CrshAutoConfigurationTests {
AuthenticationPlugin
<
String
>
authenticationPlugin
=
null
;
String
authentication
=
lifeCycle
.
getConfig
().
getProperty
(
"crash.auth"
);
assertNotNull
(
authentication
);
for
(
AuthenticationPlugin
plugin
:
lifeCycle
.
getContext
().
getPlugins
(
AuthenticationPlugin
.
class
))
{
for
(
AuthenticationPlugin
plugin
:
lifeCycle
.
getContext
().
getPlugins
(
AuthenticationPlugin
.
class
))
{
if
(
authentication
.
equals
(
plugin
.
getName
()))
{
authenticationPlugin
=
plugin
;
break
;
...
...
@@ -272,7 +279,8 @@ public class CrshAutoConfigurationTests {
AuthenticationPlugin
<
String
>
authenticationPlugin
=
null
;
String
authentication
=
lifeCycle
.
getConfig
().
getProperty
(
"crash.auth"
);
assertNotNull
(
authentication
);
for
(
AuthenticationPlugin
plugin
:
lifeCycle
.
getContext
().
getPlugins
(
AuthenticationPlugin
.
class
))
{
for
(
AuthenticationPlugin
plugin
:
lifeCycle
.
getContext
().
getPlugins
(
AuthenticationPlugin
.
class
))
{
if
(
authentication
.
equals
(
plugin
.
getName
()))
{
authenticationPlugin
=
plugin
;
break
;
...
...
@@ -308,10 +316,15 @@ public class CrshAutoConfigurationTests {
return
new
AuthenticationManager
()
{
@Override
public
Authentication
authenticate
(
Authentication
authentication
)
throws
AuthenticationException
{
if
(
authentication
.
getName
().
equals
(
USERNAME
)
&&
authentication
.
getCredentials
().
equals
(
PASSWORD
))
{
authentication
=
new
UsernamePasswordAuthenticationToken
(
authentication
.
getPrincipal
(),
authentication
.
getCredentials
(),
Collections
.
singleton
(
new
SimpleGrantedAuthority
(
"ROLE_ADMIN"
)));
public
Authentication
authenticate
(
Authentication
authentication
)
throws
AuthenticationException
{
if
(
authentication
.
getName
().
equals
(
USERNAME
)
&&
authentication
.
getCredentials
().
equals
(
PASSWORD
))
{
authentication
=
new
UsernamePasswordAuthenticationToken
(
authentication
.
getPrincipal
(),
authentication
.
getCredentials
(),
Collections
.
singleton
(
new
SimpleGrantedAuthority
(
"ROLE_ADMIN"
)));
}
else
{
throw
new
BadCredentialsException
(
"Invalid username and password"
);
...
...
spring-boot-actuator/src/test/java/org/springframework/boot/actuate/properties/CrshPropertiesTests.java
View file @
d784cb6a
...
...
@@ -16,12 +16,6 @@
package
org
.
springframework
.
boot
.
actuate
.
properties
;
import
static
org
.
junit
.
Assert
.
assertArrayEquals
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
java.util.Collections
;
import
java.util.HashMap
;
import
java.util.Map
;
...
...
@@ -37,6 +31,12 @@ import org.springframework.boot.actuate.properties.CrshProperties.SpringAuthenti
import
org.springframework.boot.bind.RelaxedDataBinder
;
import
org.springframework.core.convert.support.DefaultConversionService
;
import
static
org
.
junit
.
Assert
.
assertArrayEquals
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
/**
* Tests for {@link CrshProperties}.
*
...
...
@@ -48,7 +48,8 @@ public class CrshPropertiesTests {
public
void
testBindingAuth
()
{
CrshProperties
props
=
new
CrshProperties
();
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
props
,
"shell"
);
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"shell.auth"
,
"spring"
)));
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"shell.auth"
,
"spring"
)));
assertFalse
(
binder
.
getBindingResult
().
hasErrors
());
assertEquals
(
"spring"
,
props
.
getAuth
());
}
...
...
@@ -67,7 +68,8 @@ public class CrshPropertiesTests {
CrshProperties
props
=
new
CrshProperties
();
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
props
,
"shell"
);
binder
.
setConversionService
(
new
DefaultConversionService
());
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"shell.command_refresh_interval"
,
"1"
)));
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"shell.command_refresh_interval"
,
"1"
)));
assertFalse
(
binder
.
getBindingResult
().
hasErrors
());
assertEquals
(
1
,
props
.
getCommandRefreshInterval
());
}
...
...
@@ -77,11 +79,12 @@ public class CrshPropertiesTests {
CrshProperties
props
=
new
CrshProperties
();
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
props
,
"shell"
);
binder
.
setConversionService
(
new
DefaultConversionService
());
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"shell.command_path_patterns"
,
"pattern1, pattern2"
)));
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"
shell.command_path_patterns"
,
"
pattern1, pattern2"
)));
assertFalse
(
binder
.
getBindingResult
().
hasErrors
());
assertEquals
(
2
,
props
.
getCommandPathPatterns
().
length
);
Assert
.
assertArrayEquals
(
new
String
[]
{
"pattern1"
,
"pattern2"
},
props
.
getCommandPathPatterns
());
Assert
.
assertArrayEquals
(
new
String
[]
{
"pattern1"
,
"pattern2"
},
props
.
getCommandPathPatterns
());
}
@Test
...
...
@@ -89,11 +92,12 @@ public class CrshPropertiesTests {
CrshProperties
props
=
new
CrshProperties
();
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
props
,
"shell"
);
binder
.
setConversionService
(
new
DefaultConversionService
());
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"shell.config_path_patterns"
,
"pattern1, pattern2"
)));
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"
shell.config_path_patterns"
,
"
pattern1, pattern2"
)));
assertFalse
(
binder
.
getBindingResult
().
hasErrors
());
assertEquals
(
2
,
props
.
getConfigPathPatterns
().
length
);
Assert
.
assertArrayEquals
(
new
String
[]
{
"pattern1"
,
"pattern2"
},
props
.
getConfigPathPatterns
());
Assert
.
assertArrayEquals
(
new
String
[]
{
"pattern1"
,
"pattern2"
},
props
.
getConfigPathPatterns
());
}
@Test
...
...
@@ -101,11 +105,12 @@ public class CrshPropertiesTests {
CrshProperties
props
=
new
CrshProperties
();
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
props
,
"shell"
);
binder
.
setConversionService
(
new
DefaultConversionService
());
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"shell.disabled_plugins"
,
"pattern1, pattern2"
)));
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"
shell.disabled_plugins"
,
"
pattern1, pattern2"
)));
assertFalse
(
binder
.
getBindingResult
().
hasErrors
());
assertEquals
(
2
,
props
.
getDisabledPlugins
().
length
);
assertArrayEquals
(
new
String
[]
{
"pattern1"
,
"pattern2"
},
props
.
getDisabledPlugins
());
assertArrayEquals
(
new
String
[]
{
"pattern1"
,
"pattern2"
},
props
.
getDisabledPlugins
());
}
@Test
...
...
@@ -269,7 +274,8 @@ public class CrshPropertiesTests {
public
void
testBindingSpring
()
{
SpringAuthenticationProperties
props
=
new
SpringAuthenticationProperties
();
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
props
,
"shell.auth.spring"
);
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"shell.auth.spring.roles"
,
"role1, role2"
)));
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"shell.auth.spring.roles"
,
"role1, role2"
)));
assertFalse
(
binder
.
getBindingResult
().
hasErrors
());
Properties
p
=
new
Properties
();
...
...
@@ -278,5 +284,4 @@ public class CrshPropertiesTests {
assertEquals
(
"role1, role2"
,
p
.
get
(
CrshProperties
.
CRASH_AUTH_SPRING_ROLES
));
}
}
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jdbc/DataSourceAutoConfigurationTests.java
View file @
d784cb6a
...
...
@@ -16,11 +16,6 @@
package
org
.
springframework
.
boot
.
autoconfigure
.
jdbc
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
import
java.sql.Connection
;
import
java.sql.Driver
;
import
java.sql.DriverPropertyInfo
;
...
...
@@ -47,6 +42,10 @@ import org.springframework.jdbc.core.JdbcTemplate;
import
org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations
;
import
org.springframework.util.ClassUtils
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertTrue
;
/**
* Tests for {@link DataSourceAutoConfiguration}.
...
...
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