Fixed
Details
Priority
CriticalFix versions
Components
Assignee
Aaron ZeckoskiAaron Zeckoski(Deactivated)Reporter
Zhen QianZhen Qian
Details
Details
Priority
Fix versions
Components
Assignee
Aaron Zeckoski
Aaron Zeckoski(Deactivated)Reporter
Zhen Qian
Zhen QianCreated January 2, 2013 at 1:27 PM
Updated October 21, 2014 at 8:03 AM
Resolved February 24, 2014 at 11:00 AM
Since SAK-22059 change, DAV access is redirect if the browser type is of webdav.nonDavUserAgent setting (default to be Mozilla, Opera or Blackberry)
Here is the relavent code inside doGet() call:
for (String agent: nonDavUserAgent) {
if (header.toUpperCase().contains(agent.toUpperCase())) {
if (M_log.isInfoEnabled()) M_log.info("Redirecting DAV access because this is a browser." + header);
resp.sendRedirect("/access/content" + adjustId(path));
}
}
doContent(path, req, resp);
It looks like the doGet should exit after the sendRedirect. We have seen errors like the following in CTools now related to the redirect:
2013-01-02 10:48:19,587 [ajp-apr-127.0.0.1-8009-exec-15] INFO org.sakaiproject.dav.DavServlet - Redirecting DAV access because this is a browser.Mozilla/3.0 (compatible; Acrobat
Annots 8.0)
2013-01-02 10:48:19,598 [ajp-apr-127.0.0.1-8009-exec-15] WARN org.sakaiproject.util.RequestFilter -
java.lang.IllegalStateException: Cannot call sendError() after the response has been committed
at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:467)
at javax.servlet.http.HttpServletResponseWrapper.sendError(HttpServletResponseWrapper.java:129)
at org.sakaiproject.dav.DavServlet.doContent(DavServlet.java:1776)
at org.sakaiproject.dav.DavServlet.doGet(DavServlet.java:1590)
at org.sakaiproject.dav.DavServlet.doDispatch(DavServlet.java:1147)
at org.sakaiproject.dav.DavServlet.service(DavServlet.java:1078)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.sakaiproject.util.RequestFilter.doFilter(RequestFilter.java:695)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:197)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)