You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by Apache Wiki <wi...@apache.org> on 2007/11/07 15:23:07 UTC

[Tapestry Wiki] Update of "Tapestry5HowToCreateADispatcher2" by ChrisLewis

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Tapestry Wiki" for change notification.

The following page has been changed by ChrisLewis:
http://wiki.apache.org/tapestry/Tapestry5HowToCreateADispatcher2

New page:
In the article Tapestry5HowToCreateADispatcher we covered the basics of creating a Dispatcher and getting it into the pipeline. This quick article is a suppliment to that one, continuing the example of implementing an access control mechanism. Specifically, we will cover how to access request-specific state objects (ASOs) from a singleton service (our access controller).

Before reading this be sure to first read about how Tapestry manages application state:

http://tapestry.apache.org/tapestry5/tapestry-core/guide/appstate.html

This is a fairly quick and painless read and should get you up to speed on what application state is, when and why you need it, how to use it, and the basics of how it works. The following javadocs are also worth pointing out:

[http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry/annotations/ApplicationState.html ApplicationState], [http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry/services/ApplicationStateManager.html ApplicationStateManager]

== A Glance at the Problem ==
The access controller we've implemented is a singleton service. It doesn't make sense to implement it per-request as the only per-request state it needs are the access permissions of the requesting user. However we can't just annotate a service field with @!ApplicationState as we normally would in a page or component.

{{{
import java.io.IOException;

import org.apache.tapestry.services.ApplicationStateManager;
import org.apache.tapestry.services.Request;
import org.apache.tapestry.services.Response;

public class AccessController implements Dispatcher {
	
	private ApplicationStateManager asm;
	
	public SingletonAccessControllerImpl(ApplicationStateManager asm) {
		this.asm = asm;
	}

	public boolean dispatch(Request request, Response response) throws IOException {
		boolean canAccess = false;
		
		if(asm.exists(UserPermissions.class)) {
			
		}
		
		if(!canAccess) {
			/*
			 * This is an unauthorized request, so throw an exception. We'll need
			 * more grace than this, such as a customized exception page and/or
			 * redirection to a login page...
			 */
			throw new RuntimeException("Access violation!");
		}
		
		return false;
	}
	
}
}}}

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


Re: [Tapestry Wiki] Update of "Tapestry5HowToCreateADispatcher2" by ChrisLewis

Posted by Chris Lewis <ch...@bellsouth.net>.
I'm still editing this. I accidentally saved instead of previewed - 
sorry :-|

Apache Wiki wrote:
> Dear Wiki user,
>
> You have subscribed to a wiki page or wiki category on "Tapestry Wiki" for change notification.
>
> The following page has been changed by ChrisLewis:
> http://wiki.apache.org/tapestry/Tapestry5HowToCreateADispatcher2
>
> New page:
> In the article Tapestry5HowToCreateADispatcher we covered the basics of creating a Dispatcher and getting it into the pipeline. This quick article is a suppliment to that one, continuing the example of implementing an access control mechanism. Specifically, we will cover how to access request-specific state objects (ASOs) from a singleton service (our access controller).
>
> Before reading this be sure to first read about how Tapestry manages application state:
>
> http://tapestry.apache.org/tapestry5/tapestry-core/guide/appstate.html
>
> This is a fairly quick and painless read and should get you up to speed on what application state is, when and why you need it, how to use it, and the basics of how it works. The following javadocs are also worth pointing out:
>
> [http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry/annotations/ApplicationState.html ApplicationState], [http://tapestry.apache.org/tapestry5/apidocs/org/apache/tapestry/services/ApplicationStateManager.html ApplicationStateManager]
>
> == A Glance at the Problem ==
> The access controller we've implemented is a singleton service. It doesn't make sense to implement it per-request as the only per-request state it needs are the access permissions of the requesting user. However we can't just annotate a service field with @!ApplicationState as we normally would in a page or component.
>
> {{{
> import java.io.IOException;
>
> import org.apache.tapestry.services.ApplicationStateManager;
> import org.apache.tapestry.services.Request;
> import org.apache.tapestry.services.Response;
>
> public class AccessController implements Dispatcher {
> 	
> 	private ApplicationStateManager asm;
> 	
> 	public SingletonAccessControllerImpl(ApplicationStateManager asm) {
> 		this.asm = asm;
> 	}
>
> 	public boolean dispatch(Request request, Response response) throws IOException {
> 		boolean canAccess = false;
> 		
> 		if(asm.exists(UserPermissions.class)) {
> 			
> 		}
> 		
> 		if(!canAccess) {
> 			/*
> 			 * This is an unauthorized request, so throw an exception. We'll need
> 			 * more grace than this, such as a customized exception page and/or
> 			 * redirection to a login page...
> 			 */
> 			throw new RuntimeException("Access violation!");
> 		}
> 		
> 		return false;
> 	}
> 	
> }
> }}}
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: dev-help@tapestry.apache.org
>
>
>   


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