Frankly I have no clue how to reopen things in the github issue tracker (me and the github issue tracker don't get along terribly well ;-) ), so I opened a new one:
http://github.com/dpp/liftweb/issues/#issue/105 Thanks! -Ross On Oct 15, 2009, at 3:55 PM, Marius wrote: > > I think this is caused by LiftServlet#sendResponse#fixHeaders code. > Can you please open a ticket or re-open the existent one? I'll fix it > if Dave doesn't do it faster. > > Br's, > Marius > > On Oct 15, 10:47 pm, Ross Mellgren <dri...@gmail.com> wrote: >> 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 -~----------~----~----~----~------~----~------~--~---