You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by "Ben Tomasini (JIRA)" <ta...@jakarta.apache.org> on 2006/06/02 17:11:30 UTC
[jira] Commented: (TAPESTRY-695) WebRequestServicerFilter lacks
support for tapestry.globals.*
[ http://issues.apache.org/jira/browse/TAPESTRY-695?page=comments#action_12414437 ]
Ben Tomasini commented on TAPESTRY-695:
---------------------------------------
I am having the same type of issue. I have a need to perform some logic on each and every request. Having an additional pipeline which runs after the globals are set, and before the engine, would be ideal.
For now I will just use the workaround stated above.
> WebRequestServicerFilter lacks support for tapestry.globals.*
> -------------------------------------------------------------
>
> Key: TAPESTRY-695
> URL: http://issues.apache.org/jira/browse/TAPESTRY-695
> Project: Tapestry
> Type: Bug
> Components: Framework, Web
> Reporter: Peter Ertl
> Assignee: 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