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]
>>>
>>>
>>
>

Reply via email to