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