my point is that this case is on the fence. it is an invalid url, and it is a security violation. so which one should take precendence?
my other concern is that we would have to maintain a long list of exceptions that should be passed through, which becomes a pita. -igor On Sun, Jul 26, 2009 at 1:32 PM, Alex Objelean<alex_objel...@yahoo.com> wrote: > > I just want to remind the reason why the InvalidUrlException was introduced: > to avoid situations when user would tweak somehow the url and get the > InternalError Page... I introduced a request for enhancement for > InvalidUrlException feature and if there are any problems related to it, you > can blame me..:( > > Alex Objelean > > > igor.vaynberg wrote: >> >> then we are getting in a debate of what use an invalidurlexception >> really is. if we forward page expired and a bunch of other exceptions, >> why do we even need an invalidurlexception... >> >> the point is the user has submitted a form that they should not have >> been able to, it is an invalid url... >> >> i dont know off the top of my head what the best approach is. >> >> -igor >> >> On Sun, Jul 26, 2009 at 12:46 PM, Olger Warnier<ol...@xs4all.nl> wrote: >>> Hi Igor, >>> >>>> if the form is disabled why is it allowed to be submitted? >>> >>> In a test you can ;) >>> When you know what to submit, it is possible to submit those values >>> without >>> a page, although I can imagine that it is quite hard to achieve due to >>> the >>> way wicket handles form variables and stuff (via the session). >>> >>> Even with that in mind, I wonder if it is possible to have the >>> UnauthorizedException thrown directly (without the InvalidUrlException). >>> >>> Kind Regards, >>> >>> Olger >>> >>>> >>>> -igor >>>> >>>> On Sun, Jul 26, 2009 at 10:58 AM, Olger Warnier<ol...@xs4all.nl> wrote: >>>>> >>>>> Hi Developers, >>>>> >>>>> Slowly but surely I move through the tests of the wicket security >>>>> framework. >>>>> In one test, the SecureFormTest, i ran into some strange behaviour. >>>>> It starts with an exception like this: >>>>> org.apache.wicket.protocol.http.request.InvalidUrlException: >>>>> org.apache.wicket.authorization.UnauthorizedActionException: Component >>>>> [MarkupContainer [Component id = form]] does not permit action ENABLE >>>>> >>>>> (note, the test is commented in order to prevent build failures) >>>>> >>>>> There is a secureform that has no rights to be filled an submitted. >>>>> Normal >>>>> behaviour till now was the return of a login page. In some cases I >>>>> found >>>>> the >>>>> return of the UnauthorizedActionException - all fine till now. (running >>>>> 1.4-rc7) >>>>> In this test though, I there is no redirection to a Login Page and I >>>>> can't >>>>> catch the UnauthorizedActionException. This started my quest into the >>>>> originating throws, this happens to be the throw of an >>>>> InvalidUrlException >>>>> in WebRequestCycleProcessor (line 248 and on) >>>>> >>>>> catch (WicketRuntimeException e) >>>>> { >>>>> // we need to let page expired exception sift >>>>> through >>>>> instead of covering it up >>>>> >>>>> if (e instanceof PageExpiredException) >>>>> { >>>>> throw e; >>>>> } >>>>> else if (e.getCause() instanceof >>>>> PageExpiredException) >>>>> { >>>>> throw e; >>>>> } >>>>> else >>>>> { >>>>> throw new InvalidUrlException(e); >>>>> } >>>>> } >>>>> >>>>> The UnauthorizedActionException is catched here and thereafter thrown >>>>> wrapped in an InvalidUrlException. >>>>> >>>>> This is not the end of it, the RequestCycle catches this exception and >>>>> has >>>>> some logic for it (line 1337 starting) : >>>>> >>>>> catch (RuntimeException e) >>>>> { >>>>> /* >>>>> * check if the raised exception wraps an abort >>>>> exception. if so, it is probably wise to >>>>> * unwrap and rethrow the abort exception >>>>> */ >>>>> Throwable cause = e.getCause(); >>>>> while (cause != null) >>>>> { >>>>> if (cause instanceof AbortException) >>>>> { >>>>> throw ((AbortException)cause); >>>>> } >>>>> cause = cause.getCause(); >>>>> } >>>>> if (!handlingException) >>>>> { >>>>> // set step manually to handle exception >>>>> handlingException = true; >>>>> >>>>> // probably our last chance the exception >>>>> can >>>>> be logged. >>>>> // Note that a PageExpiredException >>>>> should >>>>> not be logged, because >>>>> // it's not an internal error >>>>> if (!(e instanceof PageExpiredException)) >>>>> { >>>>> logRuntimeException(e); >>>>> } >>>>> >>>>> // try to play nicely and let the request >>>>> processor handle the >>>>> // exception response. If that doesn't >>>>> work, >>>>> any runtime exception >>>>> // will automatically be bubbled up >>>>> if (processor != null) >>>>> { >>>>> processor.respond(e, this); >>>>> } >>>>> } >>>>> else.......... >>>>> >>>>> The exception runs through the cause loop, ending with a null cause, >>>>> and >>>>> continues to be logged and thereafter triggers a >>>>> processor.respond(e,this) >>>>> based on the InvalidUrlException. >>>>> >>>>> This one is catched by the AbstractRequestCycleProcessor, doing the >>>>> following (line 116 and on): >>>>> >>>>> final Application application = Application.get(); >>>>> final IExceptionSettings settings = >>>>> application.getExceptionSettings(); >>>>> final Page responsePage = requestCycle.getResponsePage(); >>>>> >>>>> Page override = onRuntimeException(responsePage, e); >>>>> if (override != null) >>>>> { >>>>> throw new RestartResponseException(override); >>>>> } >>>>> else if (e instanceof AuthorizationException) >>>>> { >>>>> // are authorization exceptions always thrown >>>>> before >>>>> the real >>>>> // render? >>>>> // else we need to make a page (see below) or set >>>>> it >>>>> hard to a >>>>> // redirect. >>>>> Class<? extends Page> accessDeniedPageClass = >>>>> application.getApplicationSettings() >>>>> .getAccessDeniedPage(); >>>>> >>>>> throw new >>>>> RestartResponseAtInterceptPageException(accessDeniedPageClass); >>>>> } >>>>> else if (e instanceof PageExpiredException) >>>>> { >>>>> Class<? extends Page> pageExpiredErrorPageClass = >>>>> application.getApplicationSettings() >>>>> .getPageExpiredErrorPage(); >>>>> >>>>> As you can see, this class expects a AuthorizationException, but the >>>>> "e" >>>>> in >>>>> question is an InvalidUrlException with as cause a >>>>> UnauthorizedActionException. >>>>> >>>>> I could fix this in wicket-security by checking the >>>>> InvalidUrlExceptions >>>>> somehow ( I assume using the onRuntimeException) for this cause and >>>>> redirect >>>>> to a unauthorized page, access denied page (or something), but I'd like >>>>> to >>>>> see what the best option is here. >>>>> >>>>> 1) WebRequestCycleProcessor does not rethrow the WicketRuntimeException >>>>> in >>>>> all cases, why is that ? >>>>> Is it an option to rethrow when there is a unauthorized type of >>>>> exception >>>>> here ? >>>>> 2) RequestCycle is doing nothing specific for this matter, so I expect >>>>> no >>>>> changes here >>>>> 3) AbstractRequestCycleProcessor checks for the authorization >>>>> exception, >>>>> it >>>>> seems to me that that will never come (it is rethrown as invalidurl in >>>>> 1) >>>>> >>>>> Do I miss something here ? >>>>> If not, I would say that the UnAuthorizedExceptions should be rethrown >>>>> as >>>>> such at the WebRequestCycleProcessor. >>>>> >>>>> Kind Regards, >>>>> >>>>> Olger >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >>>> For additional commands, e-mail: users-h...@wicket.apache.org >>>> >>>> >>>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >>> For additional commands, e-mail: users-h...@wicket.apache.org >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> >> > > -- > View this message in context: > http://www.nabble.com/UnauthorizedActionException-wrapped-in-an-InvalidUrlException--%3E-how-to-deal-with-it---tp24668942p24670188.html > Sent from the Wicket - User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org