Существует несколько возможных способов реализации такой функциональности. На этот раз я не очень знаком с WebSphere, поэтому поправьте меня, если я ошибаюсь.
- Вариант 1. Обработка на уровне сервера
WebSphere предлагает свойство конфигурации, очень похожее на maxPostSize
Tomcat. Для случая Tomcat это ограничивает максимальный размер поста на уровне соединителя. Я полагаю, что эквивалент для этого для WebSphere PostSizeLimit
. Вы можете изменить файл конфигурации сервера приложений и установить для него нужный размер (в байтах).
- Вариант 2 - Программная обработка
HttpServletRequest
не предлагает готовый способ проверки размера входящего запроса. Для преодоления этого есть два варианта. Один из них - попытаться получить значение заголовка Content-Length
. Проблема в том, что это может присутствовать не всегда. Еще одна потенциальная проблема для этого, это то, что это возвращает только размер тела (не включая заголовки), как это определено здесь .
Если вы уверены, что этот заголовок всегда будет присутствовать и предполагаете, что вам не важен размер заголовков, вы можете попробовать это.
Другой способ - попытаться использовать ServletRequest#getContentLength
, который также может вернуть размер тела.
Последний последний способ для вас - получить inputStream
запроса, используйте BufferedReader
, чтобы прочитать его локально и сохранить в байтовом массиве. Имея это в виду, вы сможете определить размер. Единственная проблема, связанная с этим решением, состоит в том, что входной поток HttpServletRequest может быть прочитан только один раз, а это означает, что вам нужно как-то его кешировать (решение на основе фильтров будет работать для этого очень хорошо).
В любом случае, помимо выполнения вышеизложенного, реальная вещь заключается в том, что вы делаете в случае, если размер превышает желаемый предел. В вашем примере кода вы, кажется, пытаетесь прочитать его до тех пор, пока не будет достигнут желаемый размер, а затем просто вернуть то, что вы уже прочитали. Я думаю, что это неправильно, так как вы можете получить недопустимое тело запроса. Я думаю, что было бы лучше, если бы вы на самом деле отбросили запрос, если он превысил разрешенный лимит.
Я надеюсь, что помощь выше.