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
3f0367e2
Commit
3f0367e2
authored
Nov 05, 2019
by
Andy Wilkinson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Apply changes recommended by Jetty team to JettyEmbeddedErrorHandler
Closes gh-18842
parent
5765cfe0
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
19 additions
and
64 deletions
+19
-64
JettyEmbeddedErrorHandler.java
...rk/boot/web/embedded/jetty/JettyEmbeddedErrorHandler.java
+8
-60
JettyServletWebServerFactory.java
...boot/web/embedded/jetty/JettyServletWebServerFactory.java
+2
-2
JettyServlet9419WebServerFactoryTests.java
...embedded/jetty/JettyServlet9419WebServerFactoryTests.java
+2
-1
JettyServletWebServerFactoryTests.java
...web/embedded/jetty/JettyServletWebServerFactoryTests.java
+7
-1
No files found.
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyEmbeddedErrorHandler.java
View file @
3f0367e2
...
...
@@ -18,20 +18,15 @@ package org.springframework.boot.web.embedded.jetty;
import
java.io.IOException
;
import
javax.servlet.ServletContext
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequestWrapper
;
import
javax.servlet.http.HttpServletResponse
;
import
org.eclipse.jetty.http.HttpMethod
;
import
org.eclipse.jetty.server.Request
;
import
org.eclipse.jetty.server.handler.ErrorHandler
;
import
org.eclipse.jetty.server.handler.ErrorHandler.ErrorPageMapper
;
import
org.springframework.util.ReflectionUtils
;
import
org.eclipse.jetty.servlet.ErrorPageErrorHandler
;
/**
* Variation of Jetty's {@link ErrorHandler} that supports all {@link HttpMethod
* Variation of Jetty's {@link Error
PageError
Handler} that supports all {@link HttpMethod
* HttpMethods} rather than just {@code GET}, {@code POST} and {@code HEAD}. By default
* Jetty <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=446039">intentionally only
* supports a limited set of HTTP methods</a> for error pages, however, Spring Boot
...
...
@@ -40,65 +35,18 @@ import org.springframework.util.ReflectionUtils;
* @author Phillip Webb
* @author Christoph Dreis
*/
class
JettyEmbeddedErrorHandler
extends
ErrorHandler
implements
ErrorPageMapper
{
static
final
boolean
ERROR_PAGE_FOR_METHOD_AVAILABLE
;
static
{
ERROR_PAGE_FOR_METHOD_AVAILABLE
=
ReflectionUtils
.
findMethod
(
ErrorHandler
.
class
,
"errorPageForMethod"
,
String
.
class
)
!=
null
;
}
private
final
ErrorHandler
delegate
;
JettyEmbeddedErrorHandler
(
ErrorHandler
delegate
)
{
this
.
delegate
=
delegate
;
}
class
JettyEmbeddedErrorHandler
extends
ErrorPageErrorHandler
{
@Override
public
void
handle
(
String
target
,
Request
baseRequest
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
IOException
{
if
(!
ERROR_PAGE_FOR_METHOD_AVAILABLE
)
{
String
method
=
request
.
getMethod
();
if
(!
HttpMethod
.
GET
.
is
(
method
)
&&
!
HttpMethod
.
POST
.
is
(
method
)
&&
!
HttpMethod
.
HEAD
.
is
(
method
))
{
request
=
new
ErrorHttpServletRequest
(
request
);
}
}
this
.
delegate
.
handle
(
target
,
baseRequest
,
request
,
response
);
}
@Override
public
boolean
errorPageForMethod
(
String
method
)
{
// Available in Jetty 9.4.21+
public
boolean
errorPageForMethod
(
String
method
)
{
return
true
;
}
@Override
public
String
getErrorPage
(
HttpServletRequest
request
)
{
if
(
this
.
delegate
instanceof
ErrorPageMapper
)
{
return
((
ErrorPageMapper
)
this
.
delegate
).
getErrorPage
(
request
);
}
return
null
;
}
private
static
class
ErrorHttpServletRequest
extends
HttpServletRequestWrapper
{
private
boolean
simulateGetMethod
=
true
;
ErrorHttpServletRequest
(
HttpServletRequest
request
)
{
super
(
request
);
}
@Override
public
String
getMethod
()
{
return
(
this
.
simulateGetMethod
?
HttpMethod
.
GET
.
toString
()
:
super
.
getMethod
());
}
@Override
public
ServletContext
getServletContext
()
{
this
.
simulateGetMethod
=
false
;
return
super
.
getServletContext
();
}
public
void
handle
(
String
target
,
Request
baseRequest
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
IOException
{
baseRequest
.
setMethod
(
"GET"
);
super
.
doError
(
target
,
baseRequest
,
request
,
response
);
}
}
spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactory.java
View file @
3f0367e2
...
...
@@ -339,8 +339,8 @@ public class JettyServletWebServerFactory extends AbstractServletWebServerFactor
@Override
public
void
configure
(
WebAppContext
context
)
throws
Exception
{
ErrorHandler
errorHandler
=
context
.
get
ErrorHandler
();
context
.
setErrorHandler
(
new
JettyEmbeddedErrorHandler
(
errorHandler
)
);
JettyEmbeddedErrorHandler
errorHandler
=
new
JettyEmbedded
ErrorHandler
();
context
.
setErrorHandler
(
errorHandler
);
addJettyErrorPages
(
errorHandler
,
getErrorPages
());
}
...
...
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/jetty/JettyServlet9419WebServerFactoryTests.java
View file @
3f0367e2
...
...
@@ -16,6 +16,7 @@
package
org
.
springframework
.
boot
.
web
.
embedded
.
jetty
;
import
org.eclipse.jetty.server.handler.ErrorHandler
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
...
...
@@ -39,7 +40,7 @@ public class JettyServlet9419WebServerFactoryTests extends AbstractJettyServletW
@Test
public
void
correctVersionOfJettyUsed
()
{
assertThat
(
JettyEmbeddedErrorHandler
.
ERROR_PAGE_FOR_METHOD_AVAILABLE
).
isFalse
(
);
assertThat
(
ErrorHandler
.
class
.
getPackage
().
getImplementationVersion
()).
isEqualTo
(
"9.4.19.v20190610"
);
}
}
spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/jetty/JettyServletWebServerFactoryTests.java
View file @
3f0367e2
...
...
@@ -20,6 +20,8 @@ import java.net.InetAddress;
import
java.time.Duration
;
import
java.util.Arrays
;
import
java.util.Collection
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
javax.servlet.ServletContextEvent
;
import
javax.servlet.ServletContextListener
;
...
...
@@ -29,6 +31,7 @@ import org.eclipse.jetty.server.Handler;
import
org.eclipse.jetty.server.Server
;
import
org.eclipse.jetty.server.ServerConnector
;
import
org.eclipse.jetty.server.SslConnectionFactory
;
import
org.eclipse.jetty.server.handler.ErrorHandler
;
import
org.eclipse.jetty.server.handler.HandlerCollection
;
import
org.eclipse.jetty.server.handler.HandlerWrapper
;
import
org.eclipse.jetty.util.thread.QueuedThreadPool
;
...
...
@@ -59,7 +62,10 @@ public class JettyServletWebServerFactoryTests extends AbstractJettyServletWebSe
@Test
public
void
correctVersionOfJettyUsed
()
{
assertThat
(
JettyEmbeddedErrorHandler
.
ERROR_PAGE_FOR_METHOD_AVAILABLE
).
isTrue
();
String
jettyVersion
=
ErrorHandler
.
class
.
getPackage
().
getImplementationVersion
();
Matcher
matcher
=
Pattern
.
compile
(
"[0-9]+.[0-9]+.([0-9]+)[\\.-].*"
).
matcher
(
jettyVersion
);
assertThat
(
matcher
.
find
()).
isTrue
();
assertThat
(
Integer
.
valueOf
(
matcher
.
group
(
1
))).
isGreaterThan
(
19
);
}
@Test
...
...
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