【问题标题】:Unable to set MaxFormContentSize in jetty embedded server无法在码头嵌入式服务器中设置 MaxFormContentSize
【发布时间】:2021-10-04 22:24:07
【问题描述】:

我查看了所有建议,并尝试将最大内容大小值设置为较小 (700),以证明我可以更改它。码头 9.4.41。

当我发送这样的 POST 时:

0000:   POST /data1/MaxRequestSize/MyTryURL01 HTTP/1.1\r\n
0030:   Accept: application/xml,application/atom+xml\r\n
005E:   User-Agent: xxxxxxxxxxx\r\n
0077:   Content-Type: application/atom+xml; charset=utf-8\r\n
00AA:   Host: localhost:9090\r\n
00C0:   Connection: keep-alive\r\n
00D8:   Content-Length: 808\r\n
00ED:   \r\n
...

我没有收到任何错误(即 808 > 700)。

提取我的服务器启动代码:

HandlerCollection       handlers        = new HandlerCollection();
System.setProperty( "org.eclipse.jetty.server.Request.maxFormContentSize", "700" ); /**1**/
server = new Server();
server.setHandler( handlers );
server.setAttribute( "org.eclipse.jetty.server.Request.maxFormContentSize", 700 ); /**2**/

// Setting up connection
ServerConnector serverConn      = null;
HttpConfiguration httpConfig    = new HttpConfiguration();
httpConfig.setSendServerVersion( false );
httpConfig.setSendXPoweredBy( false );
HttpConnectionFactory hcf = new HttpConnectionFactory( httpConfig );
serverConn = new ServerConnector( server, hcf );
server.addConnector( serverConn );
serverConn.setPort( httpPort );
serverConn.setName( Constants.CONF_HTTP_CONNECTOR );
serverConn.setReuseAddress( true );

// Initializing servlets
contextHandlers = new ContextHandlerCollection();
ServletHolder[] holders = new ServletHolder[ 1 ];
ServletHolder holder = new ServletHolder( myServlet );
holder.setInitParameter( ... );
ServletContextHandler handler = new ServletContextHandler();
handler.setMaxFormContentSize( 700 );                         /**3**/
handler.setContextPath( servicePath );
handler.setAllowNullPathInfo( true );
connectors = new String[ 2 ];
connectors[0] = "@" + Constants.CONF_HTTP_CONNECTOR;
connectors[1] = "@" + Constants.CONF_ADMIN_CONNECTOR;
handler.setVirtualHosts( connectors );
handler.setDisplayName( "foo" );
handler.addServlet( holder, "/*" );
contextHandlers.addHandler( handler );

// Launching
handlers.addHandler( contextHandlers );
server.start();

任何建议表示赞赏。

【问题讨论】:

  • 我查看了 Jetty 代码,ContextHandler 实际上使用 Integer.getInteger(MAX_FORM_CONTENT_SIZE_KEY, DEFAULT_MAX_FORM_CONTENT_SIZE);在实例初始化期间。因此 /**1**/ 应该可以工作。
  • 如果您有 multipart/form-data 内容,则使用 servlet 规范 MultipartConfigElement 来配置最大大小。

标签: jetty embedded-jetty


【解决方案1】:

Jetty 仅对 application/x-www-form-urlencoded 实施最大限制。我的测试没有使用那个特定的编码。

【讨论】:

  • 提示:不要使用属性,而是使用ServletContextHandler.setMaxFormContentSize(int)ServletContextHandler.setMaxFormKeys(int)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多