JAX-RS 在 Liberty 上抛出 URISyntaxException
JAX-RS is throwing URISyntaxException on Liberty
我的 JAX-RS 应用程序在 Liberty 19.0.0.10 上运行良好。我遇到的问题似乎是 Liberty 运行时中的一个错误,如果 @PathParam 有反斜杠,它会抛出 URISyntaxException 异常。该问题是在安全代码扫描期间发现的。
- 我试图通过使用预匹配的 ContainerRequestFilter 来解决这个问题,但我看到了同样的异常,即使它可能在匹配任何资源之前被处理。
- 我尝试使用自定义异常处理程序,但仍然看到相同的错误。
- 尝试在 getinfo 函数中捕获异常显然是行不通的,因为错误发生在进入函数本身之前。
- 使用@Encoded 注释显然没有任何区别。
[ERROR ] SRVE0777E: Exception thrown by application class 'java.net.URI.create:863'
java.lang.IllegalArgumentException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at java.net.URI.create(URI.java:863)
at com.ibm.ws.jaxrs20.endpoint.AbstractJaxRsWebEndpoint.getBaseURL(AbstractJaxRsWebEndpoint.java:245)
at [internal classes]
Caused by: java.net.URISyntaxException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at java.net.URI$Parser.fail(URI.java:2859)
at java.net.URI$Parser.checkChars(URI.java:3032)
at java.net.URI$Parser.parseHierarchical(URI.java:3116)
at java.net.URI$Parser.parse(URI.java:3064)
at java.net.URI.<init>(URI.java:599)
at java.net.URI.create(URI.java:861)
... 2 more
[ERROR ] SRVE0315E: An exception occurred: java.lang.Throwable: java.lang.IllegalArgumentException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:5051)
at [internal classes]
Caused by: java.lang.IllegalArgumentException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at java.net.URI.create(URI.java:863)
at com.ibm.ws.jaxrs20.endpoint.AbstractJaxRsWebEndpoint.getBaseURL(AbstractJaxRsWebEndpoint.java:245)
... 1 more
Caused by: java.net.URISyntaxException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at java.net.URI$Parser.fail(URI.java:2859)
at java.net.URI$Parser.checkChars(URI.java:3032)
at java.net.URI$Parser.parseHierarchical(URI.java:3116)
at java.net.URI$Parser.parse(URI.java:3064)
at java.net.URI.<init>(URI.java:599)
at java.net.URI.create(URI.java:861)
... 2 more
这是代码示例
@Path("/somepath")
public class MyClass {
@GET
@Path("/uuid/{UUID}")
@Produces(MediaType.APPLICATION_JSON)
public Response getInfo(@PathParam("UUID") String uuid) {
try {
// request processing goes here
} catch (Exception e){
// URISyntaxException can't be handled here.
}
}
}
该堆栈出现在 19.0.0.10 中,但应该在更新的版本中得到修复 - 修复是在 19.0.0.11-12 时间范围内进行的,因此如果您可以升级到 20.0.0.1 或更高版本,应该可以解决这个问题。
我的 JAX-RS 应用程序在 Liberty 19.0.0.10 上运行良好。我遇到的问题似乎是 Liberty 运行时中的一个错误,如果 @PathParam 有反斜杠,它会抛出 URISyntaxException 异常。该问题是在安全代码扫描期间发现的。
- 我试图通过使用预匹配的 ContainerRequestFilter 来解决这个问题,但我看到了同样的异常,即使它可能在匹配任何资源之前被处理。
- 我尝试使用自定义异常处理程序,但仍然看到相同的错误。
- 尝试在 getinfo 函数中捕获异常显然是行不通的,因为错误发生在进入函数本身之前。
- 使用@Encoded 注释显然没有任何区别。
[ERROR ] SRVE0777E: Exception thrown by application class 'java.net.URI.create:863'
java.lang.IllegalArgumentException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at java.net.URI.create(URI.java:863)
at com.ibm.ws.jaxrs20.endpoint.AbstractJaxRsWebEndpoint.getBaseURL(AbstractJaxRsWebEndpoint.java:245)
at [internal classes]
Caused by: java.net.URISyntaxException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at java.net.URI$Parser.fail(URI.java:2859)
at java.net.URI$Parser.checkChars(URI.java:3032)
at java.net.URI$Parser.parseHierarchical(URI.java:3116)
at java.net.URI$Parser.parse(URI.java:3064)
at java.net.URI.<init>(URI.java:599)
at java.net.URI.create(URI.java:861)
... 2 more
[ERROR ] SRVE0315E: An exception occurred: java.lang.Throwable: java.lang.IllegalArgumentException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:5051)
at [internal classes]
Caused by: java.lang.IllegalArgumentException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at java.net.URI.create(URI.java:863)
at com.ibm.ws.jaxrs20.endpoint.AbstractJaxRsWebEndpoint.getBaseURL(AbstractJaxRsWebEndpoint.java:245)
... 1 more
Caused by: java.net.URISyntaxException: Illegal character in path at index 80: https://hotsauce/somepath/uuid/a=\dg=bc
at java.net.URI$Parser.fail(URI.java:2859)
at java.net.URI$Parser.checkChars(URI.java:3032)
at java.net.URI$Parser.parseHierarchical(URI.java:3116)
at java.net.URI$Parser.parse(URI.java:3064)
at java.net.URI.<init>(URI.java:599)
at java.net.URI.create(URI.java:861)
... 2 more
这是代码示例
@Path("/somepath")
public class MyClass {
@GET
@Path("/uuid/{UUID}")
@Produces(MediaType.APPLICATION_JSON)
public Response getInfo(@PathParam("UUID") String uuid) {
try {
// request processing goes here
} catch (Exception e){
// URISyntaxException can't be handled here.
}
}
}
该堆栈出现在 19.0.0.10 中,但应该在更新的版本中得到修复 - 修复是在 19.0.0.11-12 时间范围内进行的,因此如果您可以升级到 20.0.0.1 或更高版本,应该可以解决这个问题。