The logic used by the IoC container is the same whether its injecting via a
service binder method or by the constructor of the implementation class.

On 9/28/07, Chris Lewis <[EMAIL PROTECTED]> wrote:
>
> The only interface I implement is Dispatcher, so all should be good.
> Thanks for the pointer on bind() - I will use it. Will I then need to
> use @Inject/@InjectService in my constructor, or will the container
> "see" the needed arguments?
>
> Howard Lewis Ship wrote:
> > 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