목차

JBoss EAP 7 parameter size 변경

문제

INFO  [stdout] (default task-5) javax.servlet.ServletException: UT000047: The number of parameters exceeded the maximum of 1000
...
INFO  [stdout] (default task-5) Caused by: java.lang.IllegalStateException: UT000047: The number of parameters exceeded the maximum of 1000
INFO  [stdout] (default task-5)         at io.undertow.server.handlers.form.FormData.add(FormData.java:78)
INFO  [stdout] (default task-5)         at io.undertow.server.handlers.form.FormData.add(FormData.java:68)
INFO  [stdout] (default task-5)         at io.undertow.server.handlers.form.FormEncodedDataDefinition$FormEncodedDataParser.doParse(FormEncodedDataDefinition.java:172)
INFO  [stdout] (default task-5)         at io.undertow.server.handlers.form.FormEncodedDataDefinition$FormEncodedDataParser.parseBlocking(FormEncodedDataDefinition.java:251)
INFO  [stdout] (default task-5)         at io.undertow.servlet.spec.HttpServletRequestImpl.parseFormData(HttpServletRequestImpl.java:762)
INFO  [stdout] (default task-5)         at io.undertow.servlet.spec.HttpServletRequestImpl.getParameter(HttpServletRequestImpl.java:636)
INFO  [stdout] (default task-5)         at javax.servlet.ServletRequestWrapper.getParameter(ServletRequestWrapper.java:194)
...

위와같이 The number of parameters exceeded the maximum of 1000 에러가 발생하는 경우는 POST/GET 호출시에 전달되는 파라메터 갯수가 많은 경우 해당 에러가 발생한다. 파라메터 갯수의 기본값은 1000 이기 때문에 1000개가 넘어가는 파라메터를 전달하면 오류가 발생하는 것이다.

해결방법

http-listener, ajp-listener, https-listener 등 리스너의 max-parameters 값을 변경해주면 해결된다.

jboss-cli 명령어로 아래와 같이 적용해주도록 한다.

[standalone@localhost:9999 /] /subsystem=undertow/server=default-server/http-listener=default/:write-attribute(name=max-parameters,value=5000)

위의 명령어로 변경하게되면 설정파일 xml 내의 내용이 아래와 같이 변경된다.

<subsystem xmlns="urn:jboss:domain:undertow:3.1">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default"  max-parameters="2000" socket-binding="http" redirect-socket="https"/>
        <host name="default-host" alias="localhost">
            ...(snip)..
        </host>
    </server>
    ...(snip)..

max-parameters 수치는 무제한으로 설정할 수는 없으며 Integer.MAX_VALUE 값 까지 설정이 가능하다. 하지만 너무 높은값으로 설정할 경우 DDOS공격등에 취약해지므로 주의하도록 한다.

참조링크