gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:51:09 25 4
gpt4 key购买 nike

我正在寻找设置传入 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com