Looks pretty reasonable to me.

You're building the hard way:

public static void bind(ServiceBinder binder) {
  binder.bind(Dispatcher.class, SingletonAccessControllerImpl.class
).withId("AccessController");
}

The only other issue (I'd have to check) is to ensure that the interfaces
you are implementing are all public, not internal.

On 9/27/07, Chris Lewis <[EMAIL PROTECTED]> wrote:
>
> Hi Ben,
>
> I asked a question like this some time ago, and I've made some good
> progress like this. I have the same basic requirements as you and
> specifically do not want my pages to deal with
> authentication/restriction AT ALL. I did some reading about request
> handling as well as digging through the source (specifically
> TapestryModule) and realized I should be able to achieve this by
> contributing a Dispatcher to the MasterDispatcher service, such that it
> sits before the render and action dispatchers. My attention has been
> temporarily diverted so I haven't worked on it the last few days, but
> here's the basic code for I've done so far.
>
> In my app module:
>
>     public Dispatcher buildAccessController(
>         Map<String, String> configuration,
>         @InjectService("ApplicationStateManager")
> ApplicationStateManager asm
>         ) {
>         return new SingletonAccessControllerImpl(configuration, asm);
>     }
>
>     public void
> contributeMasterDispatcher(OrderedConfiguration<Dispatcher> configuration,
>         @InjectService("AccessController") Dispatcher accessControl) {
>         configuration.add("AccessController", accessControl,
> "before:PageRender");
>     }
>
> I intend to use ApplicationStateManager to grab client/session/request
> specific ASOs (namely a User/permissions object), so I can use a
> singleton access controller and still access user-specific data. The
> contribution puts my dispatcher ahead of the page and action
> dispatchers. AFAIK this is not in the docs but its quite clear in the
> TapestryModule.
>
> And here is my (test) dispatch implementation:
>
>     public boolean dispatch(Request request, Response response) throws
> IOException {
>         boolean canAccess = true;
>
>         //...Access control logic using the ApplicationStateManager
>
>         return ! canAccess;
>     }
>
> The inverted return will halt processing of the request if canAccess is
> true (see docs/src for Dispatcher). Throwing a kind of access exception
> would probably do the trick as well.
>
> I hope this helps, and if you make good progress do share.
>
> Also, Howard if you see anything obviously wrong or "bad" with this
> method, please share :-).
>
> chris
>
> Ben Tomasini wrote:
> > Hi,
> >
> > I am working on an application that requires a logged in user for access
> to
> > any of the pages.  My plan is to create a login form and store the
> logged in
> > user in an ASO.  I understand that I can implement an onActivate() on
> each
> > of my pages, check to see if the user exists in the ASO, and if not,
> > redirect the user to the login page.  I could put this method into an
> > abstract page which all of my pages extend from; however, I would rather
> not
> > put that kind of constraint and burden on page development.
> >
> > Is there a more global way to enforce that an ASO exists, and if not,
> > redirect to a page?
> >
> > Ben
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


-- 
Howard M. Lewis Ship
Partner and Senior Architect at Feature50

Creator Apache Tapestry and Apache HiveMind

Reply via email to