Thanks, I'll look into that then.

What I want to do:

1. The user accesses http://myserver.com/mypage. Should get the same
url/protocol in return.
2. The user accesses https://myserver.com/mypage. Should get the same
url/protocol in return.

As of now, the user gets a fixed protocol in return, not the protocol he
requested.



On Wed, Nov 26, 2008 at 12:29 PM, Michael Gerzabek <[EMAIL PROTECTED]
> wrote:

> Inge,
>
> not sure that I undestand fully what you are about. It sounds like you also
> want to implement RequestSecurityManager (
> http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry5/internal/services/package-tree.html).
> This is at least what I did and it works for me.
>
> /Michael
>
> Inge Solvoll schrieb:
>
>  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]
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to