java - 如何设置传入 HTTPServletRequest 对象的限制?

标签 java servlets servlet-3.0 java-6

我正在寻找设置传入 http 请求最大限制的选项,例如想要将限制设置为不超过 6MB?我怎样才能实现这一目标?

我的代码片段;

public String getContent(HttpServletRequest request)
                    throws IOException {

                StringBuffer lines = new StringBuffer();
                try {
//Tried the below line not sure if it is right but did not work    
//BufferedReader reader = new BufferedReader(request.getReader(),60048);

                   if(req.getContentLength()< 600048) {
                    BufferedReader reader = request.getReader();
                    String line = null;
                    while ((line = reader.readLine()) != null) {
                        lines.append(line);
                    }
                    reader.close();
                } catch (IOException exc) {

                    throw exc;
                }
                return lines.toString();
            }

           }//Check for size ends here
        }

最佳答案

您可以通过多种方法来实现此类功能。这一次,我对 WebSphere 不太熟悉,所以如果我错了,请纠正我。

  • 选项 1 - 在服务器级别处理此问题

WebSphere 似乎提供了与 Tomcat 的 maxPostSize 非常相似的配置属性。对于 Tomcat 的情况,这限制了连接器级别的最大柱尺寸。我认为 WebSphere 的等效项是 PostSizeLimit。您可以继续编辑应用程序服务器的配置文件,将其设置为所需的大小(以字节为单位)。

  • 选项 2 - 以编程方式处理此问题

HttpServletRequest 不提供开箱即用的方法来检查传入请求的大小。为了克服这个问题,有两种选择。一种是尝试检索 Content-Length header 的值。问题是这可能并不总是存在。另一个潜在的问题是,这仅返回正文的大小(不包括标题),如定义的 here 所示。 .

如果您确定此 header 始终存在,并且假设您不关心 header 的大小,则可以继续尝试此操作。

另一种方法是尝试使用ServletRequest#getContentLength,它也可能返回主体的大小。

最后一种方法是获取请求的 inputStream,使用 BufferedReader 在本地读取它并将其存储在字节数组中。有了这个,您应该能够确定尺寸。该解决方案的唯一问题是 HttpServletRequest inputStream 只能读取一次,这意味着您需要以某种方式缓存它(基于过滤器的解决方案对此非常有用)。

无论如何,除了执行上述操作之外,真正的事情是在大小超出所需限制的情况下您要做的事情。在您的代码示例中,您似乎尝试读取它,直到达到所需的大小,然后返回到目前为止您已读取的内容。我的想法是这是错误的,因为您最终可能会得到无效的请求正文。我认为,如果请求超出了允许的限制,您最好实际上放弃该请求。

希望以上内容对您有所帮助。

关于java - 如何设置传入 HTTPServletRequest 对象的限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52171708/

相关文章:

eclipse - 当我尝试在 Eclipse 中运行我的项目时,为什么找不到我的 VM 参数的路径?

java - 如何设置 jFormattedTextField 使其只允许 2 个数字?

Java:多线程程序中的 java.util.NoSuchElementException?

java - 使用 javassist 创建类并使其可用

java - 我可以使用 servlet 或 jsp 代码获取 eclipse 项目路径吗?

java - 优化将StringBuilder的内容写入ServletResponse

jsp - Apache Tomcat - HTTP 状态 404 - 未找到

java - 如何将 'double' userLati、userLong 值和 String userName 传递给 Json 变量/对象

java - Servlet 3.0 Spring Java 配置 JNDI

java - 尽管跟踪模式 cookie,JBoss 7 仍将 JSESSIONID 附加到 URL