diff --git a/web/webkit/src/main/scala/net/liftweb/http/Req.scala b/web/webkit/src/main/scala/net/liftweb/http/Req.scala index 27d69f7d7c..e6532cb019 100644 --- a/web/webkit/src/main/scala/net/liftweb/http/Req.scala +++ b/web/webkit/src/main/scala/net/liftweb/http/Req.scala @@ -338,7 +338,16 @@ object FileParamHolder { } } -private[http] object CurrentReq extends ThreadGlobal[Req] +/** + * A Thread-global containing the current Req. Set very, very early + */ +object CurrentReq extends ThreadGlobal[Req] + +/** + * A ThreadGlobal containing the low-level HTTPRequest and HTTPResponse instances + * Set very, very early. + */ +object CurrentHTTPReqResp extends ThreadGlobal[(HTTPRequest, HTTPResponse)] private final case class AvoidGAL(func: () => ParamCalcInfo) { lazy val thunk: ParamCalcInfo = func() @@ -520,7 +529,7 @@ object Req { def parsePath(in: String): ParsePath = { val p1 = fixURI((in match {case null => "/"; case s if s.length == 0 => "/"; case s => s}).replaceAll("/+", "/")) val front = p1.startsWith("/") - val back = p1.length > 1 && p1.endsWith("/") + val back = p1.length >= 1 && p1.endsWith("/") val orgLst = p1.replaceAll("/$", "/index").split("/"). toList.map(_.trim).filter(_.length > 0) diff --git a/web/webkit/src/main/scala/net/liftweb/http/provider/HTTPProvider.scala b/web/webkit/src/main/scala/net/liftweb/http/provider/HTTPProvider.scala index fd8f60d5d2..90e7b4c6e0 100644 --- a/web/webkit/src/main/scala/net/liftweb/http/provider/HTTPProvider.scala +++ b/web/webkit/src/main/scala/net/liftweb/http/provider/HTTPProvider.scala @@ -57,21 +57,23 @@ trait HTTPProvider { LiftRules.early.toList.foreach(_(req)) } - val newReq = Req(req, LiftRules.statelessRewrite.toList, - LiftRules.statelessTest.toList, - LiftRules.statelessReqTest.toList, - System.nanoTime) - - CurrentReq.doWith(newReq) { - URLRewriter.doWith(url => - NamedPF.applyBox(resp.encodeUrl(url), - LiftRules.urlDecorate.toList) openOr - resp.encodeUrl(url)) { - if (!(isLiftRequest_?(newReq) && - actualServlet.service(newReq, resp))) { - chain - } - } + CurrentHTTPReqResp.doWith(req -> resp) { + val newReq = Req(req, LiftRules.statelessRewrite.toList, + LiftRules.statelessTest.toList, + LiftRules.statelessReqTest.toList, + System.nanoTime) + + CurrentReq.doWith(newReq) { + URLRewriter.doWith(url => + NamedPF.applyBox(resp.encodeUrl(url), + LiftRules.urlDecorate.toList) openOr + resp.encodeUrl(url)) { + if (!(isLiftRequest_?(newReq) && + actualServlet.service(newReq, resp))) { + chain + } + } + } } }