mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-21 18:09:20 +00:00
Fix for parsing of "If-Modified-Since" header
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@14679 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -30,9 +30,12 @@ import java.io.InputStream;
|
|||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
@@ -73,6 +76,11 @@ public class StreamContent extends AbstractWebScript
|
|||||||
{
|
{
|
||||||
// Logger
|
// Logger
|
||||||
private static final Log logger = LogFactory.getLog(StreamContent.class);
|
private static final Log logger = LogFactory.getLog(StreamContent.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* format definied by RFC 822, see http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3
|
||||||
|
*/
|
||||||
|
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z", Locale.US);
|
||||||
|
|
||||||
/** Services */
|
/** Services */
|
||||||
protected PermissionService permissionService;
|
protected PermissionService permissionService;
|
||||||
@@ -306,20 +314,33 @@ public class StreamContent extends AbstractWebScript
|
|||||||
|
|
||||||
// check If-Modified-Since header and set Last-Modified header as appropriate
|
// check If-Modified-Since header and set Last-Modified header as appropriate
|
||||||
Date modified = (Date)nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED);
|
Date modified = (Date)nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED);
|
||||||
|
long modifiedSince = -1;
|
||||||
String modifiedSinceStr = req.getHeader("If-Modified-Since");
|
String modifiedSinceStr = req.getHeader("If-Modified-Since");
|
||||||
if (modifiedSinceStr == null)
|
if (modifiedSinceStr == null)
|
||||||
{
|
{
|
||||||
modifiedSinceStr = "-1";
|
modifiedSince = -1;
|
||||||
}
|
}
|
||||||
long modifiedSince = new Long(modifiedSinceStr);
|
else
|
||||||
if (modifiedSince > 0L)
|
|
||||||
{
|
{
|
||||||
// round the date to the ignore millisecond value which is not supplied by header
|
try
|
||||||
long modDate = (modified.getTime() / 1000L) * 1000L;
|
|
||||||
if (modDate <= modifiedSince)
|
|
||||||
{
|
{
|
||||||
res.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
|
modifiedSince = dateFormat.parse(modifiedSinceStr).getTime();
|
||||||
return;
|
}
|
||||||
|
catch (ParseException e)
|
||||||
|
{
|
||||||
|
if (logger.isInfoEnabled())
|
||||||
|
logger.info("Browser sent badly-formatted If-Modified-Since header: " + modifiedSinceStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modifiedSince > 0L)
|
||||||
|
{
|
||||||
|
// round the date to the ignore millisecond value which is not supplied by header
|
||||||
|
long modDate = (modified.getTime() / 1000L) * 1000L;
|
||||||
|
if (modDate <= modifiedSince)
|
||||||
|
{
|
||||||
|
res.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user