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
66070686
Commit
66070686
authored
Dec 12, 2015
by
Phillip Webb
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #4504 from eddumelendez/gh-4461
* pr/4504: Add support for server.server-header property
parents
b2f1355e
1b81d9f0
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
138 additions
and
12 deletions
+138
-12
EndpointWebMvcChildContextConfiguration.java
...utoconfigure/EndpointWebMvcChildContextConfiguration.java
+2
-0
ServerProperties.java
...ingframework/boot/autoconfigure/web/ServerProperties.java
+15
-0
ServerPropertiesTests.java
...amework/boot/autoconfigure/web/ServerPropertiesTests.java
+15
-0
appendix-application-properties.adoc
...cs/src/main/asciidoc/appendix-application-properties.adoc
+1
-0
application.properties
...t-sample-tomcat/src/main/resources/application.properties
+1
-1
AbstractConfigurableEmbeddedServletContainer.java
...mbedded/AbstractConfigurableEmbeddedServletContainer.java
+12
-0
ConfigurableEmbeddedServletContainer.java
...ontext/embedded/ConfigurableEmbeddedServletContainer.java
+7
-0
JettyEmbeddedServletContainer.java
...context/embedded/jetty/JettyEmbeddedServletContainer.java
+1
-0
JettyEmbeddedServletContainerFactory.java
.../embedded/jetty/JettyEmbeddedServletContainerFactory.java
+47
-8
TomcatEmbeddedServletContainerFactory.java
...mbedded/tomcat/TomcatEmbeddedServletContainerFactory.java
+4
-0
UndertowEmbeddedServletContainer.java
...t/embedded/undertow/UndertowEmbeddedServletContainer.java
+14
-0
UndertowEmbeddedServletContainerFactory.java
...ded/undertow/UndertowEmbeddedServletContainerFactory.java
+8
-3
AbstractEmbeddedServletContainerFactoryTests.java
...mbedded/AbstractEmbeddedServletContainerFactoryTests.java
+11
-0
No files found.
spring-boot-actuator/src/main/java/org/springframework/boot/actuate/autoconfigure/EndpointWebMvcChildContextConfiguration.java
View file @
66070686
...
...
@@ -67,6 +67,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc;
* @author Dave Syer
* @author Stephane Nicoll
* @author Andy Wilkinson
* @author Eddú Meléndez
* @see EndpointWebMvcAutoConfiguration
*/
@Configuration
...
...
@@ -187,6 +188,7 @@ public class EndpointWebMvcChildContextConfiguration {
container
.
setContextPath
(
""
);
// and add the management-specific bits
container
.
setPort
(
this
.
managementServerProperties
.
getPort
());
container
.
setServerHeader
(
this
.
server
.
getServerHeader
());
container
.
setAddress
(
this
.
managementServerProperties
.
getAddress
());
container
.
addErrorPages
(
new
ErrorPage
(
this
.
server
.
getError
().
getPath
()));
}
...
...
spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java
View file @
66070686
...
...
@@ -72,6 +72,7 @@ import org.springframework.util.StringUtils;
* @author Andy Wilkinson
* @author Ivan Sopov
* @author Marcos Barbero
* @author Eddú Meléndez
*/
@ConfigurationProperties
(
prefix
=
"server"
,
ignoreUnknownFields
=
true
)
public
class
ServerProperties
...
...
@@ -116,6 +117,11 @@ public class ServerProperties
*/
private
Boolean
useForwardHeaders
;
/**
* Value to use for the server header.
*/
private
String
serverHeader
;
private
Session
session
=
new
Session
();
@NestedConfigurationProperty
...
...
@@ -173,6 +179,7 @@ public class ServerProperties
if
(
getCompression
()
!=
null
)
{
container
.
setCompression
(
getCompression
());
}
container
.
setServerHeader
(
getServerHeader
());
if
(
container
instanceof
TomcatEmbeddedServletContainerFactory
)
{
getTomcat
().
customizeTomcat
(
this
,
(
TomcatEmbeddedServletContainerFactory
)
container
);
...
...
@@ -304,6 +311,14 @@ public class ServerProperties
this
.
useForwardHeaders
=
useForwardHeaders
;
}
public
String
getServerHeader
()
{
return
this
.
serverHeader
;
}
public
void
setServerHeader
(
String
serverHeader
)
{
this
.
serverHeader
=
serverHeader
;
}
protected
final
boolean
getOrDeduceUseForwardHeaders
()
{
if
(
this
.
useForwardHeaders
!=
null
)
{
return
this
.
useForwardHeaders
;
...
...
spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java
View file @
66070686
...
...
@@ -50,6 +50,7 @@ import static org.hamcrest.Matchers.equalTo;
import
static
org
.
hamcrest
.
Matchers
.
instanceOf
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertFalse
;
import
static
org
.
junit
.
Assert
.
assertNull
;
import
static
org
.
junit
.
Assert
.
assertThat
;
import
static
org
.
mockito
.
BDDMockito
.
given
;
import
static
org
.
mockito
.
Mockito
.
atLeastOnce
;
...
...
@@ -65,6 +66,7 @@ import static org.mockito.Mockito.verify;
* @author Stephane Nicoll
* @author Andy Wilkinson
* @author Phillip Webb
* @author Eddú Meléndez
*/
public
class
ServerPropertiesTests
{
...
...
@@ -94,6 +96,19 @@ public class ServerPropertiesTests {
assertEquals
(
9000
,
this
.
properties
.
getPort
().
intValue
());
}
@Test
public
void
testServerHeaderDefault
()
throws
Exception
{
assertNull
(
this
.
properties
.
getServerHeader
());
}
@Test
public
void
testServerHeader
()
throws
Exception
{
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
this
.
properties
,
"server"
);
binder
.
bind
(
new
MutablePropertyValues
(
Collections
.
singletonMap
(
"server.server-header"
,
"Custom Server"
)));
assertEquals
(
"Custom Server"
,
this
.
properties
.
getServerHeader
());
}
@Test
public
void
testServletPathAsMapping
()
throws
Exception
{
RelaxedDataBinder
binder
=
new
RelaxedDataBinder
(
this
.
properties
,
"server"
);
...
...
spring-boot-docs/src/main/asciidoc/appendix-application-properties.adoc
View file @
66070686
...
...
@@ -153,6 +153,7 @@ content into your application; rather pick only the properties that you need.
server.jsp-servlet.init-parameters.*= # Init parameters used to configure the JSP servlet
server.jsp-servlet.registered=true # Whether or not the JSP servlet is registered
server.port=8080 # Server HTTP port.
server.server-header= # The value sent in the server response header
server.servlet-path=/ # Path of the main dispatcher servlet.
server.session.cookie.comment= # Comment for the session cookie.
server.session.cookie.domain= # Domain for the session cookie.
...
...
spring-boot-samples/spring-boot-sample-tomcat/src/main/resources/application.properties
View file @
66070686
server.compression.enabled
:
true
server.compression.min-response-size
:
1
\ No newline at end of file
server.compression.min-response-size
:
1
spring-boot/src/main/java/org/springframework/boot/context/embedded/AbstractConfigurableEmbeddedServletContainer.java
View file @
66070686
...
...
@@ -36,6 +36,7 @@ import org.springframework.util.ClassUtils;
* @author Andy Wilkinson
* @author Stephane Nicoll
* @author Ivan Sopov
* @author Eddú Meléndez
* @see AbstractEmbeddedServletContainerFactory
*/
public
abstract
class
AbstractConfigurableEmbeddedServletContainer
...
...
@@ -74,6 +75,8 @@ public abstract class AbstractConfigurableEmbeddedServletContainer
private
Compression
compression
;
private
String
serverHeader
;
/**
* Create a new {@link AbstractConfigurableEmbeddedServletContainer} instance.
*/
...
...
@@ -314,6 +317,15 @@ public abstract class AbstractConfigurableEmbeddedServletContainer
this
.
compression
=
compression
;
}
public
String
getServerHeader
()
{
return
this
.
serverHeader
;
}
@Override
public
void
setServerHeader
(
String
serverHeader
)
{
this
.
serverHeader
=
serverHeader
;
}
/**
* Utility method that can be used by subclasses wishing to combine the specified
* {@link ServletContextInitializer} parameters with those defined in this instance.
...
...
spring-boot/src/main/java/org/springframework/boot/context/embedded/ConfigurableEmbeddedServletContainer.java
View file @
66070686
...
...
@@ -29,6 +29,7 @@ import java.util.concurrent.TimeUnit;
* @author Dave Syer
* @author Andy Wilkinson
* @author Stephane Nicoll
* @author Eddú Meléndez
* @see EmbeddedServletContainerFactory
* @see EmbeddedServletContainerCustomizer
*/
...
...
@@ -189,4 +190,10 @@ public interface ConfigurableEmbeddedServletContainer {
*/
void
setCompression
(
Compression
compression
);
/**
* Sets the server header value.
* @param serverHeader the server header value
*/
void
setServerHeader
(
String
serverHeader
);
}
spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainer.java
View file @
66070686
...
...
@@ -40,6 +40,7 @@ import org.springframework.util.StringUtils;
* @author Phillip Webb
* @author Dave Syer
* @author David Liu
* @author Eddú Meléndez
* @see JettyEmbeddedServletContainerFactory
*/
public
class
JettyEmbeddedServletContainer
implements
EmbeddedServletContainer
{
...
...
spring-boot/src/main/java/org/springframework/boot/context/embedded/jetty/JettyEmbeddedServletContainerFactory.java
View file @
66070686
...
...
@@ -27,14 +27,20 @@ import java.util.HashSet;
import
java.util.List
;
import
java.util.Set
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
org.eclipse.jetty.http.HttpVersion
;
import
org.eclipse.jetty.http.MimeTypes
;
import
org.eclipse.jetty.server.AbstractConnector
;
import
org.eclipse.jetty.server.ConnectionFactory
;
import
org.eclipse.jetty.server.Connector
;
import
org.eclipse.jetty.server.ForwardedRequestCustomizer
;
import
org.eclipse.jetty.server.Handler
;
import
org.eclipse.jetty.server.HttpConfiguration
;
import
org.eclipse.jetty.server.HttpConnectionFactory
;
import
org.eclipse.jetty.server.Request
;
import
org.eclipse.jetty.server.SecureRequestCustomizer
;
import
org.eclipse.jetty.server.Server
;
import
org.eclipse.jetty.server.ServerConnector
;
...
...
@@ -84,6 +90,7 @@ import org.springframework.util.StringUtils;
* @author Dave Syer
* @author Andrey Hihlovskiy
* @author Andy Wilkinson
* @author Eddú Meléndez
* @see #setPort(int)
* @see #setConfigurations(Collection)
* @see JettyEmbeddedServletContainer
...
...
@@ -138,14 +145,7 @@ public class JettyEmbeddedServletContainerFactory
int
port
=
(
getPort
()
>=
0
?
getPort
()
:
0
);
Server
server
=
new
Server
(
new
InetSocketAddress
(
getAddress
(),
port
));
configureWebAppContext
(
context
,
initializers
);
if
(
getCompression
()
!=
null
&&
getCompression
().
getEnabled
())
{
HandlerWrapper
gzipHandler
=
createGzipHandler
();
gzipHandler
.
setHandler
(
context
);
server
.
setHandler
(
gzipHandler
);
}
else
{
server
.
setHandler
(
context
);
}
server
.
setHandler
(
addHandlerWrappers
(
context
));
this
.
logger
.
info
(
"Server initialized with port: "
+
port
);
if
(
getSsl
()
!=
null
&&
getSsl
().
isEnabled
())
{
SslContextFactory
sslContextFactory
=
new
SslContextFactory
();
...
...
@@ -163,6 +163,21 @@ public class JettyEmbeddedServletContainerFactory
return
getJettyEmbeddedServletContainer
(
server
);
}
private
Handler
addHandlerWrappers
(
Handler
handler
)
{
if
(
getCompression
()
!=
null
&&
getCompression
().
getEnabled
())
{
handler
=
applyWrapper
(
handler
,
createGzipHandler
());
}
if
(
StringUtils
.
hasText
(
getServerHeader
()))
{
handler
=
applyWrapper
(
handler
,
new
ServerHeaderHandler
(
getServerHeader
()));
}
return
handler
;
}
private
Handler
applyWrapper
(
Handler
handler
,
HandlerWrapper
wrapper
)
{
wrapper
.
setHandler
(
handler
);
return
wrapper
;
}
private
HandlerWrapper
createGzipHandler
()
{
ClassLoader
classLoader
=
getClass
().
getClassLoader
();
if
(
ClassUtils
.
isPresent
(
GZIP_HANDLER_JETTY_9_2
,
classLoader
))
{
...
...
@@ -709,4 +724,28 @@ public class JettyEmbeddedServletContainerFactory
}
/**
* {@link HandlerWrapper} to add a custom {@code server} header.
*/
private
static
class
ServerHeaderHandler
extends
HandlerWrapper
{
private
static
final
String
SERVER_HEADER
=
"server"
;
private
final
String
value
;
ServerHeaderHandler
(
String
value
)
{
this
.
value
=
value
;
}
@Override
public
void
handle
(
String
target
,
Request
baseRequest
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
IOException
,
ServletException
{
if
(!
response
.
getHeaderNames
().
contains
(
SERVER_HEADER
))
{
response
.
setHeader
(
SERVER_HEADER
,
this
.
value
);
}
super
.
handle
(
target
,
baseRequest
,
request
,
response
);
}
}
}
spring-boot/src/main/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactory.java
View file @
66070686
...
...
@@ -85,6 +85,7 @@ import org.springframework.util.StringUtils;
* @author Brock Mills
* @author Stephane Nicoll
* @author Andy Wilkinson
* @author Eddú Meléndez
* @see #setPort(int)
* @see #setContextLifecycleListeners(Collection)
* @see TomcatEmbeddedServletContainer
...
...
@@ -248,6 +249,9 @@ public class TomcatEmbeddedServletContainerFactory
protected
void
customizeConnector
(
Connector
connector
)
{
int
port
=
(
getPort
()
>=
0
?
getPort
()
:
0
);
connector
.
setPort
(
port
);
if
(
StringUtils
.
hasText
(
this
.
getServerHeader
()))
{
connector
.
setAttribute
(
"server"
,
this
.
getServerHeader
());
}
if
(
connector
.
getProtocolHandler
()
instanceof
AbstractProtocol
)
{
customizeProtocol
((
AbstractProtocol
<?>)
connector
.
getProtocolHandler
());
}
...
...
spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainer.java
View file @
66070686
...
...
@@ -57,6 +57,7 @@ import org.springframework.util.StringUtils;
*
* @author Ivan Sopov
* @author Andy Wilkinson
* @author Eddú Meléndez
* @since 1.2.0
* @see UndertowEmbeddedServletContainerFactory
*/
...
...
@@ -77,6 +78,8 @@ public class UndertowEmbeddedServletContainer implements EmbeddedServletContaine
private
final
Compression
compression
;
private
final
String
serverHeader
;
private
Undertow
undertow
;
private
boolean
started
=
false
;
...
...
@@ -89,12 +92,20 @@ public class UndertowEmbeddedServletContainer implements EmbeddedServletContaine
public
UndertowEmbeddedServletContainer
(
Builder
builder
,
DeploymentManager
manager
,
String
contextPath
,
int
port
,
boolean
useForwardHeaders
,
boolean
autoStart
,
Compression
compression
)
{
this
(
builder
,
manager
,
contextPath
,
port
,
useForwardHeaders
,
autoStart
,
compression
,
null
);
}
public
UndertowEmbeddedServletContainer
(
Builder
builder
,
DeploymentManager
manager
,
String
contextPath
,
int
port
,
boolean
useForwardHeaders
,
boolean
autoStart
,
Compression
compression
,
String
serverHeader
)
{
this
.
builder
=
builder
;
this
.
manager
=
manager
;
this
.
contextPath
=
contextPath
;
this
.
useForwardHeaders
=
useForwardHeaders
;
this
.
autoStart
=
autoStart
;
this
.
compression
=
compression
;
this
.
serverHeader
=
serverHeader
;
}
@Override
...
...
@@ -123,6 +134,9 @@ public class UndertowEmbeddedServletContainer implements EmbeddedServletContaine
if
(
this
.
useForwardHeaders
)
{
httpHandler
=
Handlers
.
proxyPeerAddress
(
httpHandler
);
}
if
(
StringUtils
.
hasText
(
this
.
serverHeader
))
{
httpHandler
=
Handlers
.
header
(
httpHandler
,
"Server"
,
this
.
serverHeader
);
}
this
.
builder
.
setHandler
(
httpHandler
);
return
this
.
builder
.
build
();
}
...
...
spring-boot/src/main/java/org/springframework/boot/context/embedded/undertow/UndertowEmbeddedServletContainerFactory.java
View file @
66070686
...
...
@@ -89,6 +89,7 @@ import org.springframework.util.ResourceUtils;
* @author Ivan Sopov
* @author Andy Wilkinson
* @author Marcos Barbero
* @author Eddú Meléndez
* @since 1.2.0
* @see UndertowEmbeddedServletContainer
*/
...
...
@@ -219,8 +220,7 @@ public class UndertowEmbeddedServletContainerFactory
DeploymentManager
manager
=
createDeploymentManager
(
initializers
);
int
port
=
getPort
();
Builder
builder
=
createBuilder
(
port
);
return
new
UndertowEmbeddedServletContainer
(
builder
,
manager
,
getContextPath
(),
port
,
this
.
useForwardHeaders
,
port
>=
0
,
getCompression
());
return
getUndertowEmbeddedServletContainer
(
builder
,
manager
,
port
);
}
private
Builder
createBuilder
(
int
port
)
{
...
...
@@ -476,7 +476,8 @@ public class UndertowEmbeddedServletContainerFactory
protected
UndertowEmbeddedServletContainer
getUndertowEmbeddedServletContainer
(
Builder
builder
,
DeploymentManager
manager
,
int
port
)
{
return
new
UndertowEmbeddedServletContainer
(
builder
,
manager
,
getContextPath
(),
port
,
port
>=
0
,
getCompression
());
port
,
isUseForwardHeaders
(),
port
>=
0
,
getCompression
(),
getServerHeader
());
}
@Override
...
...
@@ -520,6 +521,10 @@ public class UndertowEmbeddedServletContainerFactory
return
this
.
accessLogEnabled
;
}
protected
final
boolean
isUseForwardHeaders
()
{
return
this
.
useForwardHeaders
;
}
/**
* Set if x-forward-* headers should be processed.
* @param useForwardHeaders if x-forward headers should be used
...
...
spring-boot/src/test/java/org/springframework/boot/context/embedded/AbstractEmbeddedServletContainerFactoryTests.java
View file @
66070686
...
...
@@ -698,6 +698,17 @@ public abstract class AbstractEmbeddedServletContainerFactoryTests {
assertThat
(
rootResource
.
get
(),
is
(
not
(
nullValue
())));
}
@Test
public
void
customServerHeader
()
throws
Exception
{
AbstractEmbeddedServletContainerFactory
factory
=
getFactory
();
factory
.
setServerHeader
(
"MyServer"
);
this
.
container
=
factory
.
getEmbeddedServletContainer
(
exampleServletRegistration
());
this
.
container
.
start
();
ClientHttpResponse
response
=
getClientResponse
(
getLocalUrl
(
"/hello"
));
assertThat
(
response
.
getHeaders
().
getFirst
(
"server"
),
equalTo
(
"MyServer"
));
}
private
boolean
doTestCompression
(
int
contentSize
,
String
[]
mimeTypes
,
String
[]
excludedUserAgents
)
throws
Exception
{
String
testContent
=
setUpFactoryForCompression
(
contentSize
,
mimeTypes
,
...
...
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