Hmmm ... after adding tons of debug-info to my code, I currently found out, why this behaviour occurs.
ExternalCallback.performCallback(IRequestcycle) is calling activateExternalPage directly (like mentioned in the docs) - without the chance to do a validation again (in contrast to the doc of IExternalPage.activateExternalPage) :( Ok, the page is validated once - but it would be great to get a second chance :) Even worth: after activateExternalPage is invoked and the listener ends, a new thread seems to be started (assuming my log-file is in sync - could be a timing problem to log those events) ? So I have no chance to get to the parameters with the help of my threaded ParamterStorage service included in every IExternalPage I use :( So I am clueless again - I do not now, where to intercept this render-process to switch to another scheme ... anybody has an idea ? Thanks, Gerald > >Hi Ivano, > >thank you for your reply. > >I am using Tapestry 4.0. > >I need the absolute url, because I want to forward (based on security >constraints of the page (or one of the containing components) currently >rendered) to the right scheme. > >Because I noticed, that getRequestCycle() is not the right place to find >the service needed for the current page in, I am currently checking with >'if (getPage() instanceof IExternalPage) ...' in the pageValidate method. > >But I think I am at the wrong place to do it (pageValidate), because >after getting things to work, the parameters of the external page are >gone :( > >It is sooooooo frustrating ... this could be the perfect security >'framework' for me. Everything was working fine (transparent forwarding >to https/http/login page whenevever the app needs it) until the >different services where involved :( > >Maybe someone could give me a hint, where to intercept the response >rendering to forward to a different scheme is the best place for. > >Here is a commented excerpt from the logfile to make things clear ... > >External page is called from the browser (needs login): > >validate begin -------------------------------- >validate:page :MyExternalPage >validate:service:external >validate:scheme :http >login needed ! >external callback stored >redirect to login page (throw new PageRedirectException(getLoginPage())) > >login page is marked to need https .... > >validate begin -------------------------------- >validate:page :secure/Login >validate:service:external (!!!!) I am still in the same requestCylce ? >validate:scheme :http >wrong scheme, switching to https >normal page, building url (instanceof IExternalPage ...) >webRequest.forward(https-url) >validate end -------------------------------- > >OK, now the scheme is https: > >validate begin -------------------------------- >validate:page :secure/Login >validate:service:page >validate:scheme :https >validate end -------------------------------- > >form is submitted: > >validate begin -------------------------------- >validate:page :secure/Login >validate:service:direct >validate:scheme :https >validate end -------------------------------- > >listener is called: > >doLogin starts <- listener bound to submit > >login was OK, activating Callback (the EXTERNAL one stored above) >getCallback().performCallback(getRequestCycle()) > >validate begin -------------------------------- >validate:page :MyExternalPage >validate:service:direct (!!!!!) :( >validate:scheme :https >scheme wrong, switching to http >external page, building url (instanceof IExternalPage ...) > >build url with: >ExternalServiceParameter eparams = new >ExternalServiceParameter(getPage().getPageName(), >getRequestCycle().getListenerParameters()) ; >link = getExternalService().getLink(false, eparams).getAbsoluteURL() ; > >webRequest.forward(http-url) (**1**) >validate end -------------------------------- >doLogin ends > >Then a NullPointerException is thrown, because the url I have forwarded >to in (**1**) does not contain the parameters from the original external >service, so activateExternalPage is throwing this exception :( > >Any ideas ? > >Thanks again ! > >Gerald > >Ivano wrote: >> Why do you need to build the url? What Tapestry version are you using? >> >> Ivano Pagano. >> >> Gerald Schöffel wrote: >> > > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
