I think I know the reason for the loop... my getBaseURL method is only called when the requested url has a different protocol than specified in MetaDataConstants.SECURE_PAGE. It seems that when I try to write a base URL in my custom method that has a different protocol than SECURE_PAGE value, they start knocking each other's heades with redirects.
Right now, it looks like this system works differently than I thought. Is it not possible to override the behaviour of one page or entire application fixed on a protocol? On Wed, Nov 26, 2008 at 11:44 AM, Kristian Marinkovic < [EMAIL PROTECTED]> wrote: > try creating the proxy manually... almost worked every time for me > > constructor injection will be performed as expected > > public static void contributeAlias( > ObjectLocator locator, > Configuration<AliasContribution> configuration ) { > > configuration.add( AliasContribution.create( > BaseURLSource.class, > locator.proxy(BaseURLSource.class,SomeImplementation.class) ); > > } > > g, > kris > > > > > "Inge Solvoll" <[EMAIL PROTECTED]> > 26.11.2008 11:37 > Bitte antworten an > "Tapestry users" <users@tapestry.apache.org> > > > An > "Tapestry users" <users@tapestry.apache.org> > Kopie > > Thema > Re: [T5] Pick up https/http from request > > > > > > > Thanks! > > But this still gives me the same loop error, because I have to inject > Request (where you inject SiteServices) into the builder method to access > the secure state of the request: > > Caused by: org.apache.tapestry5.ioc.internal.OperationException: > Construction of service 'Alias' has failed due to recursion: the service > depends on itself in some way. Please check > org.apache.tapestry5.services.TapestryModule.buildAlias(Logger, String, > AliasManager, Collection) (at TapestryModule.java:214) for references to > another service that is itself dependent on service 'Alias'. > > Inge > > On Wed, Nov 26, 2008 at 11:28 AM, Michael Gerzabek > <[EMAIL PROTECTED] > > wrote: > > > Inge, > > > > I did it successfully for a similar purpose: > > > > @SuppressWarnings("unchecked") > > public static void contributeAlias( > > @InjectService( "SiteBaseURLSource" ) > > BaseURLSource baseUrlSource, > > Configuration<AliasContribution> configuration ) { > > > > configuration.add( AliasContribution.create( > > BaseURLSource.class, > > baseUrlSource ) ); > > > > } > > > > Don't use the binder but create your own build method: > > > > @Marker( SiteServices.class ) > > public static BaseURLSource buildSiteBaseURLSource( > > @SiteServices > > SiteService site ) { > > > > return new SiteBaseURLSource( site ); > > } > > > > You can ommit the Marker annotation. > > > > /Michael > > > > Solvoll schrieb: > > > > Hi! > >> > >> I'm really struggling here as I think I'm approaching a solution. What > I'm > >> trying to do is to override/decorate/alias/replace the BaseURLSource > with > >> my > >> own implementation, like this: > >> > >> public class MyBaseURLSource implements BaseURLSource { > >> > >> private final Request request; > >> > >> public MyBaseURLSource(Request request) { > >> this.request = request; > >> } > >> > >> public String getBaseURL(boolean secure) { > >> boolean secureRequest = request.isSecure(); > >> String baseURL = String.format("%s://%s", secureRequest ? "https" : > >> "http", request.getServerName()); > >> return baseURL; > >> } > >> > >> } > >> > >> > >> Essentially, I've copied the default implementation and replaced the > usage > >> of the secure parameter with the secure value of the request. My > problem > >> is > >> that I'm not capable of putting this code to actual work in the > framework. > >> > >> I've tried: > >> - aliasing, but that didn't work because of circular dependency (I have > to > >> inject the Request) > >> - binder.bind(BaseURLSource.class, MyBaseURLSource.class), combinded > with > >> a > >> builder for MyBaseURLSource. Causes redirect loop. > >> - Decorating. Not managed to find out how I do this yet, have tried a > few > >> things. > >> > >> I'm guessing this is rather simple, it's just a bit complicated when > >> you're > >> not experienced in IoC... Anyone who wants to point me in the right > >> direction? > >> > >> Regards > >> Inge > >> > >> > >> > >> On Wed, Nov 19, 2008 at 10:22 AM, Inge Solvoll <[EMAIL PROTECTED] > >> >wrote: > >> > >> > >> > >>> I voted for this issue now. > >>> > >>> https://issues.apache.org/jira/browse/TAP5-167 > >>> > >>> This is really a big issue for our usage of T5, T5 is now forcing us > to > >>> redirect users away from http access, because we no longer can support > >>> both > >>> modes as long as T5 is fixed on either http or https. > >>> > >>> Anyone who's got a working version of a BaseURLSource contribution, > that > >>> actually can output a URL using the protocol from the initial request? > >>> > >>> Regards > >>> Inge > >>> > >>> > >>> On Mon, Nov 17, 2008 at 8:57 AM, Inge Solvoll <[EMAIL PROTECTED] > >>> >wrote: > >>> > >>> > >>> > >>>> I know, this isn't really a problem for regular pages, they load > using > >>>> the > >>>> requested protocol, when not marked as secure. But when I create > >>>> eventlinks > >>>> that updates zones, these don't work when they are generated with > http > >>>> and > >>>> the rest of the page is generated in https... > >>>> > >>>> What I would like to do is to try some more on the BaseURLSource > >>>> approach. > >>>> Anyone who's got any idea why this has no effect here? I copied and > >>>> pasted > >>>> the code from the T5 docs and put in my Appmodule, and the contribute > >>>> method > >>>> is called on server startup. I replaced the "localhost" url with an > >>>> obviously bad url, for testing, but nothing happens, all pages just > load > >>>> as > >>>> always, including eventlinks and actionlinks. > >>>> > >>>> Inge > >>>> > >>>> > >>>> On Sun, Nov 16, 2008 at 9:44 PM, Carl Crowder <[EMAIL PROTECTED] > >>>> >wrote: > >>>> > >>>> > >>>> > >>>>> I don't know if you're aware, but if you create a href something > like > >>>>> > >>>>> href="//something.com/page" > >>>>> > >>>>> then the current protocol is maintained. So if you were viewing the > >>>>> page > >>>>> at https://something.com the HREF would resolve to > >>>>> https://something.com/page and similarly with http. Unfortunately it > >>>>> requires using absolute URLs all the time. > >>>>> > >>>>> I'm not sure if that helps, but perhaps it could be used in fixing > that > >>>>> issue. > >>>>> > >>>>> Carl > >>>>> > >>>>> Inge Solvoll wrote: > >>>>> > >>>>> > >>>>>> Yes, I might. This is a major blow for us, our customers choose > freely > >>>>>> whether they want to use http or https, so the T5 way of doing > things > >>>>>> > >>>>>> > >>>>> just > >>>>> > >>>>> > >>>>>> doesn't work for us... > >>>>>> > >>>>>> On Fri, Nov 14, 2008 at 9:28 PM, Jonathan Barker < > >>>>>> [EMAIL PROTECTED]> wrote: > >>>>>> > >>>>>> > >>>>>> > >>>>>>> You might want to vote for this: > >>>>>>> > >>>>>>> https://issues.apache.org/jira/browse/TAP5-167 > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>>> -----Original Message----- > >>>>>>>> From: Inge Solvoll [mailto:[EMAIL PROTECTED] > >>>>>>>> Sent: Friday, November 14, 2008 15:10 > >>>>>>>> To: Tapestry users > >>>>>>>> Subject: Re: [T5] Pick up https/http from request > >>>>>>>> > >>>>>>>> Thanks! > >>>>>>>> > >>>>>>>> I tried copying your code into my AppModule with some small > >>>>>>>> > >>>>>>>> > >>>>>>> modifications. > >>>>>>> > >>>>>>> > >>>>>>>> But the code only runs on server startup, not when I access a > >>>>>>>> > >>>>>>>> > >>>>>>> tapestry 5 > >>>>> > >>>>> > >>>>>> page. I tried to add deliberate errors in the code, like naming the > >>>>>>>> > >>>>>>>> > >>>>>>> server > >>>>>>> > >>>>>>> > >>>>>>>> loooocalhost, but I never saw the results when accessing pages. > >>>>>>>> > >>>>>>>> Also, when I try to add "final HttpServletRequest request" as a > >>>>>>>> > >>>>>>>> > >>>>>>> parameter > >>>>> > >>>>> > >>>>>> to > >>>>>>>> the contributeAlias method, my T5.0.13 crashes complaining about > >>>>>>>> > >>>>>>>> > >>>>>>> service > >>>>> > >>>>> > >>>>>> recursion. > >>>>>>>> > >>>>>>>> What I need is for T5 to figure out that a user accesses a page > with > >>>>>>>> either > >>>>>>>> http or https, and respond on the same protocol... > >>>>>>>> > >>>>>>>> > >>>>>>>> Regards > >>>>>>>> Inge > >>>>>>>> > >>>>>>>> On Fri, Nov 14, 2008 at 4:43 PM, Keith Bottner > <[EMAIL PROTECTED]> > >>>>>>>> > >>>>>>>> > >>>>>>> wrote: > >>>>>>> > >>>>>>> > >>>>>>>> I believe you might be able to use an alternation of a solution I > >>>>>>>>> > >>>>>>>>> > >>>>>>>> used > >>>>> > >>>>> > >>>>>> for > >>>>>>>> > >>>>>>>> > >>>>>>>>> getting https to work properly between my development and > >>>>>>>>> production > >>>>>>>>> servers. > >>>>>>>>> > >>>>>>>>> public static void > contributeAlias(Configuration<AliasContribution> > >>>>>>>>> configuration, > >>>>>>>>> @Inject @Value("${"+SymbolConstants.PRODUCTION_MODE+"}" ) final > >>>>>>>>> > >>>>>>>>> > >>>>>>>> String > >>>>> > >>>>> > >>>>>> production > >>>>>>>>> { > >>>>>>>>> if (0 != production.compareToIgnoreCase("true")) > >>>>>>>>> { > >>>>>>>>> BaseURLSource source = new BaseURLSource() > >>>>>>>>> { > >>>>>>>>> public String getBaseURL(boolean secure) > >>>>>>>>> { > >>>>>>>>> String protocol = secure ? "https" : "http"; > >>>>>>>>> > >>>>>>>>> int port = secure ? 8443 : 8080; > >>>>>>>>> > >>>>>>>>> return String.format("%s://localhost:%d", > >>>>>>>>> > >>>>>>>>> > >>>>>>>> protocol, > >>>>>>> > >>>>>>> > >>>>>>>> port); > >>>>>>>>> } > >>>>>>>>> }; > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> configuration.add(AliasContribution.create(BaseURLSource.class, > >>>>>>>>> > >>>>>>>>> > >>>>>>>> source)); > >>>>>>>> > >>>>>>>> > >>>>>>>>> } > >>>>>>>>> } > >>>>>>>>> > >>>>>>>>> Somehow make this dependent on the user selection and return it > >>>>>>>>> accordingly. > >>>>>>>>> > >>>>>>>>> Not a quick solution but possible a direction to try! > >>>>>>>>> > >>>>>>>>> Keith > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On Nov 14, 2008, at 7:18 AM, Inge Solvoll wrote: > >>>>>>>>> > >>>>>>>>> Hi! > >>>>>>>>> > >>>>>>>>> > >>>>>>>>>> My web application is large and consists of Struts, T4 and T5 > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> pages. > >>>>> > >>>>> > >>>>>> In > >>>>>>> > >>>>>>> > >>>>>>>> Struts and T4, I use the current http request to figure out > whether > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> to > >>>>> > >>>>> > >>>>>> use > >>>>>>>> > >>>>>>>> > >>>>>>>>> https or not. Users can choose if they want to log in using > https > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> or > >>>>> > >>>>> > >>>>>> not. > >>>>>>>> > >>>>>>>> > >>>>>>>>> The chosen protocol is used on all pages after login. > >>>>>>>>>> > >>>>>>>>>> In T5, this is either a global static setting, or a static > setting > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> per > >>>>> > >>>>> > >>>>>> page. > >>>>>>>>>> Is there a service or something I can override to implement my > own > >>>>>>>>>> "protocol > >>>>>>>>>> builder"? Something like this: > >>>>>>>>>> > >>>>>>>>>> public class HttpProtocolBuilder { > >>>>>>>>>> public HttpProtocolBuilder (final HttpServletRequest request) > { > >>>>>>>>>> this.request = request > >>>>>>>>>> } > >>>>>>>>>> > >>>>>>>>>> public String getProtocol() { > >>>>>>>>>> if (request.isSecure()) { > >>>>>>>>>> return "https"; > >>>>>>>>>> } > >>>>>>>>>> else { > >>>>>>>>>> return "http"; > >>>>>>>>>> } > >>>>>>>>>> } > >>>>>>>>>> > >>>>>>>>>> Regards > >>>>>>>>>> > >>>>>>>>>> Inge > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>> > --------------------------------------------------------------------- > >>>>> > >>>>> > >>>>>> 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] > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>> > --------------------------------------------------------------------- > >>>>> 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] > > > > > >