Recently dpp addressed an issue I filed to allow excluding certain URLs from context rewriting -- http://github.com/dpp/liftweb/issues/closed/#issue/83
However, I think there might be a place that this change missed, or I'm doing something wrong. Overall, looking at the code I'm not sure why it doesn't work. The problem is when using RedirectResponse -- it seems like RedirectResponses are not subject to the new exclusion check, and I can't figure out where in the Lift code they're being rewritten. I have this code in Boot: LiftRules.excludePathFromContextPathRewriting.default.set(() => path => { ... path.startsWith("/login") || ... }) And then elsewhere, I have a SiteMap LocParam called NeedAnyRole (here, along with the supporting functions): val unauthorized: Loc.FailMsg = () => RedirectResponse("/login/ errorauth.jsp") /** Wrap the given If failure message with logging statements if debug logging is enabled */ def maybeWrapForLogging(reason: String, fail: Loc.FailMsg): Loc.FailMsg = logger.isDebugEnabled match { case true => () => { logger.debug("Failing SiteMap check (" + reason + ") for " + SPx.loggedInUser.pxuser.map(_.getUsername).openOr ("<anonymous user>")); fail() } case false => fail } /** Test for a role and if it is not found bounces out with a Unauthorized (well, redirect to /login/errorauth.jsp) */ object NeedAnyRole { def apply(fail: Loc.FailMsg, roleNames: String*): If = If(() => roleNames.findIndexOf(roleName => SPx.hasRole(roleName)) >= 0, maybeWrapForLogging("NeedAnyRole(" + roleNames + ")", fail)) def apply(roleNames: String*): If = apply(unauthorized, roleNames: _*) } When I fail this LocParam, here is what gets sent back to the browser (as seen by tcpdump) HTTP/1.1 302 Moved Temporarily Server: Apache-Coyote/1.1 P3P: policyref="/w3c/p3p.xml", CP="CAO DSP COR CURa ADMa DEVa CONo OUR IND PHY ONL UNI PUR FIN COM NAV DEM STA" Location: /emailwizard/login/errorauth.jsp X-Lift-Version: 1.1-SNAPSHOT Content-Type: text/html;charset=utf-8 Content-Length: 1 Date: Wed, 14 Oct 2009 15:33:36.GMT The Location: field should be /login/errorauth.jsp since I have it excluded from context rewriting. This works with normal links and other things in HTML, just this redirect isn't working as expected. I did try to do a quick spelunk in the lift code, and it looks like it should be generating a correct InMemoryResponse with the location header set to whatever I pass in, however there's a comment there that indicates something later will touch it up: case class RedirectResponse(uri: String, cookies: HTTPCookie*) extends LiftResponse { // The Location URI is not resolved here, instead it is resolved with context path prior of sending the actual response def toResponse = InMemoryResponse(Array(0), List("Location" -> uri), cookies toList, 302) } Any ideas on where the problem is? -Ross --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---