我正在寻找设置传入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不是很熟悉,所以如果我错了,请纠正我。
WebSphere似乎提供了与Tomcat的maxPostSize
非常相似的配置属性。对于Tomcat的情况,这限制了连接器级别的最大邮件大小。我认为WebSphere的等价物是PostSizeLimit
。您可以继续编辑应用程序服务器的配置文件,将其设置为所需的大小(以字节为单位)。
HttpServletRequest
没有提供检查传入请求大小的开箱即用方法。为了克服这个问题,有两种选择。一种是尝试检索Content-Length
标头的值。问题是这可能不会一直存在。另一个潜在的问题是,这只返回正文的大小(不包括标题),因为这是定义here。
如果您确定此标题始终存在并假设您不关心标题的大小,则可以继续尝试此操作。
另一种方法是尝试使用ServletRequest#getContentLength
,它也可以返回身体的大小。
最后一种方法是获取请求的inputStream
,使用BufferedReader
在本地读取它并将其存储在字节数组中。有了这个,您应该能够确定大小。关于这个解决方案的唯一问题是HttpServletRequest inputStream只能被读取一次,这意味着你需要以某种方式缓存它(基于过滤器的解决方案对此非常有用)。
除此之外,除了执行上述操作之外的其他任何方式,如果大小超过所需限制,您所做的就是这样做。在您的代码示例中,您似乎尝试读取它直到达到所需的大小,然后返回到目前为止您已阅读的内容。我的想法是这是错误的,因为你可能最终得到一个无效的请求体。我认为,如果超过允许的限制,实际删除请求会更好。
我希望以上的帮助。