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
cc857469
Commit
cc857469
authored
Jul 18, 2019
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '2.1.x'
Closes gh-17575
parents
0f105f74
173ff87b
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
119 additions
and
18 deletions
+119
-18
TomcatServletWebServerFactory.java
...ot/web/embedded/tomcat/TomcatServletWebServerFactory.java
+5
-1
ResourceHandlingApplication.java
...rc/test/java/com/example/ResourceHandlingApplication.java
+50
-17
EmbeddedServletContainerWarDevelopmentIntegrationTests.java
...beddedServletContainerWarDevelopmentIntegrationTests.java
+32
-0
EmbeddedServletContainerWarPackagingIntegrationTests.java
...EmbeddedServletContainerWarPackagingIntegrationTests.java
+32
-0
No files found.
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatServletWebServerFactory.java
View file @
cc857469
...
...
@@ -31,6 +31,7 @@ import java.util.LinkedHashSet;
import
java.util.List
;
import
java.util.Locale
;
import
java.util.Set
;
import
java.util.stream.Collectors
;
import
javax.servlet.ServletContainerInitializer
;
...
...
@@ -91,6 +92,7 @@ import org.springframework.util.StringUtils;
* @author Andy Wilkinson
* @author Eddú Meléndez
* @author Christoffer Sawicki
* @author Dawid Antecki
* @since 2.0.0
* @see #setPort(int)
* @see #setContextLifecycleListeners(Collection)
...
...
@@ -813,7 +815,9 @@ public class TomcatServletWebServerFactory extends AbstractServletWebServerFacto
@Override
public
Set
<
String
>
listWebAppPaths
(
String
path
)
{
return
this
.
delegate
.
listWebAppPaths
(
path
);
return
this
.
delegate
.
listWebAppPaths
(
path
).
stream
()
.
filter
((
webAppPath
)
->
!
webAppPath
.
startsWith
(
"/org/springframework/boot"
))
.
collect
(
Collectors
.
toSet
());
}
@Override
...
...
spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/com/example/ResourceHandlingApplication.java
View file @
cc857469
...
...
@@ -18,6 +18,8 @@ package com.example;
import
java.io.IOException
;
import
java.net.URL
;
import
java.util.LinkedHashSet
;
import
java.util.Set
;
import
javax.servlet.ServletException
;
import
javax.servlet.http.HttpServlet
;
...
...
@@ -38,31 +40,62 @@ import org.springframework.context.annotation.Bean;
@SpringBootApplication
public
class
ResourceHandlingApplication
{
@Bean
public
ServletRegistrationBean
<?>
resourceServletRegistration
()
{
ServletRegistrationBean
<?>
registration
=
new
ServletRegistrationBean
<
HttpServlet
>(
new
GetResourceServlet
());
registration
.
addUrlMappings
(
"/servletContext"
);
return
registration
;
}
@Bean
public
ServletRegistrationBean
<?>
resourcePathsServletRegistration
()
{
ServletRegistrationBean
<?>
registration
=
new
ServletRegistrationBean
<
HttpServlet
>(
new
GetResourcePathsServlet
());
registration
.
addUrlMappings
(
"/resourcePaths"
);
return
registration
;
}
public
static
void
main
(
String
[]
args
)
{
new
SpringApplicationBuilder
(
ResourceHandlingApplication
.
class
).
properties
(
"server.port:0"
)
.
listeners
(
new
WebServerPortFileWriter
(
args
[
0
])).
run
(
args
);
}
@Bean
public
ServletRegistrationBean
<?>
resourceServletRegistration
()
{
ServletRegistrationBean
<?>
registration
=
new
ServletRegistrationBean
<
HttpServlet
>(
new
HttpServlet
()
{
@Override
protected
void
doGet
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
throws
ServletException
,
IOException
{
URL
resource
=
getServletContext
().
getResource
(
req
.
getQueryString
());
if
(
resource
==
null
)
{
resp
.
sendError
(
404
);
}
else
{
resp
.
getWriter
().
println
(
resource
);
resp
.
getWriter
().
flush
();
private
static
final
class
GetResourcePathsServlet
extends
HttpServlet
{
@Override
protected
void
doGet
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
throws
ServletException
,
IOException
{
collectResourcePaths
(
"/"
).
forEach
(
resp
.
getWriter
()::
println
);
resp
.
getWriter
().
flush
();
}
private
Set
<
String
>
collectResourcePaths
(
String
path
)
{
Set
<
String
>
allResourcePaths
=
new
LinkedHashSet
<>();
Set
<
String
>
pathsForPath
=
getServletContext
().
getResourcePaths
(
path
);
if
(
pathsForPath
!=
null
)
{
for
(
String
resourcePath
:
pathsForPath
)
{
allResourcePaths
.
add
(
resourcePath
);
allResourcePaths
.
addAll
(
collectResourcePaths
(
resourcePath
));
}
}
return
allResourcePaths
;
}
}
private
static
final
class
GetResourceServlet
extends
HttpServlet
{
@Override
protected
void
doGet
(
HttpServletRequest
req
,
HttpServletResponse
resp
)
throws
ServletException
,
IOException
{
URL
resource
=
getServletContext
().
getResource
(
req
.
getQueryString
());
if
(
resource
==
null
)
{
resp
.
sendError
(
404
);
}
else
{
resp
.
getWriter
().
println
(
resource
);
resp
.
getWriter
().
flush
();
}
}
});
registration
.
addUrlMappings
(
"/servletContext"
);
return
registration
;
}
}
spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/EmbeddedServletContainerWarDevelopmentIntegrationTests.java
View file @
cc857469
...
...
@@ -16,6 +16,13 @@
package
org
.
springframework
.
boot
.
context
.
embedded
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.StringReader
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
org.junit.jupiter.api.TestTemplate
;
import
org.springframework.http.HttpStatus
;
...
...
@@ -53,4 +60,29 @@ public class EmbeddedServletContainerWarDevelopmentIntegrationTests {
assertThat
(
entity
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
}
@TestTemplate
public
void
loaderClassesAreNotAvailableViaResourcePaths
(
RestTemplate
rest
)
{
ResponseEntity
<
String
>
entity
=
rest
.
getForEntity
(
"/resourcePaths"
,
String
.
class
);
assertThat
(
entity
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
readLines
(
entity
.
getBody
()))
.
noneMatch
((
resourcePath
)
->
resourcePath
.
startsWith
(
"/org/springframework/boot/loader"
));
}
private
List
<
String
>
readLines
(
String
input
)
{
if
(
input
==
null
)
{
return
Collections
.
emptyList
();
}
List
<
String
>
lines
=
new
ArrayList
<>();
try
(
BufferedReader
reader
=
new
BufferedReader
(
new
StringReader
(
input
)))
{
String
line
;
while
((
line
=
reader
.
readLine
())
!=
null
)
{
lines
.
add
(
line
);
}
return
lines
;
}
catch
(
IOException
ex
)
{
throw
new
RuntimeException
(
"Failed to read lines from input '"
+
input
+
"'"
);
}
}
}
spring-boot-tests/spring-boot-integration-tests/spring-boot-server-tests/src/test/java/org/springframework/boot/context/embedded/EmbeddedServletContainerWarPackagingIntegrationTests.java
View file @
cc857469
...
...
@@ -16,6 +16,13 @@
package
org
.
springframework
.
boot
.
context
.
embedded
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.StringReader
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
org.junit.jupiter.api.TestTemplate
;
import
org.springframework.http.HttpStatus
;
...
...
@@ -75,4 +82,29 @@ public class EmbeddedServletContainerWarPackagingIntegrationTests {
assertThat
(
entity
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
NOT_FOUND
);
}
@TestTemplate
public
void
loaderClassesAreNotAvailableViaResourcePaths
(
RestTemplate
rest
)
{
ResponseEntity
<
String
>
entity
=
rest
.
getForEntity
(
"/resourcePaths"
,
String
.
class
);
assertThat
(
entity
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
readLines
(
entity
.
getBody
()))
.
noneMatch
((
resourcePath
)
->
resourcePath
.
startsWith
(
"/org/springframework/boot/loader"
));
}
private
List
<
String
>
readLines
(
String
input
)
{
if
(
input
==
null
)
{
return
Collections
.
emptyList
();
}
List
<
String
>
lines
=
new
ArrayList
<>();
try
(
BufferedReader
reader
=
new
BufferedReader
(
new
StringReader
(
input
)))
{
String
line
;
while
((
line
=
reader
.
readLine
())
!=
null
)
{
lines
.
add
(
line
);
}
return
lines
;
}
catch
(
IOException
ex
)
{
throw
new
RuntimeException
(
"Failed to read lines from input '"
+
input
+
"'"
);
}
}
}
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