Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jetty:java.lang.IllegalArgumentException:编码无效_Java_Jetty - Fatal编程技术网

Jetty:java.lang.IllegalArgumentException:编码无效

Jetty:java.lang.IllegalArgumentException:编码无效,java,jetty,Java,Jetty,使用嵌入式Jetty(9.4.5.v20170502),使用servlet处理程序,以及URL: http://localhost:8081/?para=%u65E5 (此URL由Chrome发送,因为流量被嗅探到另一台生产服务器) 我需要使用Jetty为这个场景准备一个测试用例 有一个错误: org.eclipse.jetty.http.BadMessageException: 400: Unable to parse URI query at org.eclipse.jetty.s

使用嵌入式Jetty(
9.4.5.v20170502
),使用servlet处理程序,以及URL:

http://localhost:8081/?para=%u65E5
(此URL由Chrome发送,因为流量被嗅探到另一台生产服务器)

我需要使用Jetty为这个场景准备一个测试用例

有一个错误:

org.eclipse.jetty.http.BadMessageException: 400: Unable to parse URI query
    at org.eclipse.jetty.server.Request.getParameters(Request.java:388)
    at org.eclipse.jetty.server.Request.getParameterNames(Request.java:1036)
    at MyServlet.service(MyServlet.java:15)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841)
这源自:

java.lang.IllegalArgumentException: Not valid encoding '%u6'
    at org.eclipse.jetty.util.UrlEncoded.decodeHexByte(UrlEncoded.java:889)
    at org.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:354)
    at org.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:296)
    at org.eclipse.jetty.http.HttpURI.decodeQueryTo(HttpURI.java:615)
    at org.eclipse.jetty.server.Request.extractQueryParameters(Request.java:420)
    at org.eclipse.jetty.server.Request.getParameters(Request.java:384)
    at org.eclipse.jetty.server.Request.getParameterNames(Request.java:1036)
    at MyServlet.service(MyServlet.java:15)
但是,在使用时,调用
request.getParameterNames()
时,同一URL没有错误

主要类别:

public class JettyTest {

    public static void main(String[] args) throws Exception {
        final Server server = new Server(8081);

        // doesn't work
        server.setHandler(getServletHandler());

        // works
        // server.setHandler(new HelloHandler());
        server.start();
    }

    private static Handler getServletHandler() throws IOException {
        final WebAppContext context = new WebAppContext();
        context.setContextPath("/");
        context.setResourceBase(".");

        final String pathSpec = "/*";
        final Class<? extends Servlet> servlet = MyServlet.class;
        context.addServlet(servlet, pathSpec);

        final WebAppClassLoader loader = new WebAppClassLoader(context);
        context.setClassLoader(loader);
        return context;
    }
}
公共类JettyTest{
公共静态void main(字符串[]args)引发异常{
最终服务器=新服务器(8081);
//不起作用
setHandler(getServletHandler());
//工作
//setHandler(新的HelloHandler());
server.start();
}
私有静态处理程序getServletHandler()引发IOException{
最终WebAppContext上下文=新的WebAppContext();
context.setContextPath(“/”);
context.setResourceBase(“.”);
最终字符串pathSpec=“/*”;

最后一个类这似乎是Jetty中的一个bug。用户可以创建一个导致Jetty无法处理请求的URL

在Jetty 9.4.15上,我发现它非常简单,只需将?%%0附加到URL。处理URL的代码尝试访问查询参数时,Jetty就会抛出一个异常:

org.eclipse.jetty.http.BadMessageException: 400: Unable to parse URI query
现在,我想说没有一个好的解决方案或解决办法


可能只有当恶意用户测试您的站点的弱点时才会发生这种情况。在这种情况下,Jetty停止处理而不是继续处理坏数据可能是可以接受的。

这似乎是Jetty中的一个错误。用户可以创建一个URL,导致Jetty无法处理请求

在Jetty 9.4.15上,我发现它非常简单,只需将?%%0附加到URL。处理URL的代码尝试访问查询参数时,Jetty就会抛出一个异常:

org.eclipse.jetty.http.BadMessageException: 400: Unable to parse URI query
现在,我想说没有一个好的解决方案或解决办法


可能只有当恶意用户在测试您的站点的弱点时才会发生这种情况。在这种情况下,Jetty停止处理而不是继续处理坏数据可能是可以接受的。

简单的解决方案:我只是在浏览器应用程序的javascript中使用“encodeURI(url)”(在ajax功能之前)问题得到了解决

简单的解决方案:我在浏览器应用程序中使用javascript中的“encodeURI(url)”(在ajax函数之前)问题已解决

您的url未进行属性编码。请尝试此url
http://localhost:8081/?para=%25u65E5
参数值由Chrome按原样发送,另一台生产服务器不会抱怨。您的url不是属性编码的。请尝试此url
http://localhost:8081/?para=%25u65E5
参数值按原样发送通过Chrome,另一个生产服务器没有抱怨。
org.eclipse.jetty.http.BadMessageException: 400: Unable to parse URI query