You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Johan Maasing (JIRA)" <ta...@jakarta.apache.org> on 2006/09/24 00:43:23 UTC

[jira] Commented: (TAPESTRY-695) WebRequestServicerFilter lacks support for tapestry.globals.*

    [ http://issues.apache.org/jira/browse/TAPESTRY-695?page=comments#action_12437162 ] 
            
Johan Maasing commented on TAPESTRY-695:
----------------------------------------

I want to retrieve some headers from the HttpRequest put there by a proxy and store them in an ASO, surely this can not be that uncommon?
I could either use servlet filters but then I can not easily get my ASOs. If I use WebRequestServicerFilter I run into this issue.
I naively expected these filters to behave like servlet-filters, you can do stuff, you call the next in the chain and then you can do some more stuff. But ApplicationStateManager seems to rely on the globals being set so I can not get my ASO before the servicer.service call and if I try to get it after it is too late.



> WebRequestServicerFilter lacks support for tapestry.globals.*
> -------------------------------------------------------------
>
>                 Key: TAPESTRY-695
>                 URL: http://issues.apache.org/jira/browse/TAPESTRY-695
>             Project: Tapestry
>          Issue Type: Bug
>          Components: Framework, Web
>            Reporter: Peter Ertl
>         Assigned To: Howard M. Lewis Ship
>
> problem description:
> step 1: let there be an "Authenticator" service which uses the current request (for credentials lookup)
> // ----------------------------------------------------------
>   <service-point id="Authenticator">
>     <invoke-factory model="threaded">
>        <construct class="AuthenticatorImpl">
>           <set-service property="request" service-id="tapestry.globals.WebRequest" />
>        </construct>
>     </invoke-factory>
>   </service-point>
> // ----------------------------------------------------------
>   public class AuthenticatorImpl implements Authenticator
>   {
>     private WebRequest request; // injected
>     // setters + other stuff omitted
>     
>     public boolean isAuthenticated()
>     {
>       if(request.getSession(false) == null)
>         return false;
>         
>       // more stuff comes here...
>     }
>   }
> // ----------------------------------------------------------
> step 2: now inject the authenticator into a request filter
> // ----------------------------------------------------------
>   <service-point id="AuthenticationFilter" interface="org.apache.tapestry.services.WebRequestServicerFilter">
>     <invoke-factory>
>        <construct class="AuthenticationFilter">
>           <set-service property="authenticator" service-id="Authenticator" />
>        </construct>
>     </invoke-factory>
>   </service-point>
>   
>   <contribution configuration-id="tapestry.request.WebRequestServicerPipeline">
>     <filter name="auth" object="service:AuthenticationFilter" />
>   </contribution>
>   
> // ----------------------------------------------------------
>   public class AuthenticationFilter implements WebRequestServicerFilter
>   {
>      private Authenticator authenticator; // injected
>   
>      // setters + other stuff omitted
>   
>      public void service(WebRequest request, WebResponse response, WebRequestServicer servicer) throws IOException
>      {
>        if(authenticator.isAuthenticated())
>        {
>           // *****************************************************
>           // the above operation "isAuthenticated()" will fail !!!
>           // request == NULL
>           // *****************************************************
>        }
>      }
>   
>   }
> // ----------------------------------------------------------
> Property 'webRequest' of <OuterProxy for tapestry.globals.RequestGlobals(org.apache.tapestry.services.RequestGlobals)> is null.
> this should not happen as the request is available at this time (it's a parameter of the service method)
> however, I do not want to handle the request to the authenticator as it's used not only in the filter 
> but also in the login page.
> I think this is a general problem with filters being called before tapestry.globals is fully initialized

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org