Keith, It sounds like you're trying to do something similar to what I was trying to do with Acegi. Basically, I wanted to populate a UserState object with sensible information after a successful authentication. I contributed to the Application State Manager, and pulled the info from Acegi, rather than the other way around. I flipped the problem upside down.
Here's a piece of what I wrote: public void contributeApplicationStateManager(MappedConfiguration<Class, ApplicationStateContribution> configuration, final HierarchyService hierarchyService, final UserProfileDAO profileDao) { ApplicationStateCreator<UserState> creator = new ApplicationStateCreator<UserState>() { public UserState create() { UserState state = new UserState(); SecurityContext context = SecurityContextHolder.getContext(); Authentication authResult = context.getAuthentication(); if (authResult == null) throw new RuntimeException("no auth when trying to create UserState"); .... more lookups, and other stuff... > -----Original Message----- > From: Keith Bottner [mailto:[EMAIL PROTECTED] > Sent: Monday, November 03, 2008 11:48 > To: Tapestry users > Subject: Re: Accessing ApplicationStateManager from within a Filter > > This is the hardest part about grasping Tapestry 5, knowing what you > can do and how you can do it when there seems to be an endless way to > tie things together that are loosely if at all documented. So I > apologize if the additional details to my original question lead to > one of these solutions that I am just unable to determine from the > context of the proposed solutions. > > I tried to keep my question at simple as possible without revealing > too many details and getting bogged down in integration issues but I > will outline a little more of what I am trying to do for the sake of > seeking clarity. > > I am using Acegi-Security, as such I am overriding the > AuthenticationProcessingFilter that the Acegi-Security library sets up > in its module. Now in my library module I construct my specific > version of AuthenticationProcessingFilter which is a subclass of > AuthenticationProcessingFilter and overrides the appropriate methods. > In those methods I am attempting to access the ApplicationStateManager. > > As I specified in the earlier email the ApplicationStateManager always > comes in as null. > > Here is the code from the Acegi-Security LibraryModule that is > relevant to the AuthenticationProcessingFilter. > > public static void contributeAlias(@AcegiServices > SaltSourceService saltSource, > @AcegiServices AuthenticationProcessingFilter > authenticationProcessingFilter, > Configuration<AliasContribution> configuration) { > > configuration.add(AliasContribution.create(SaltSourceService.class, > saltSource)); > > configuration > .add(AliasContribution.create(AuthenticationProcessingFilter.class, > authenticationProcessingFilter)); > } > > public static void contributeHttpServletRequestHandler( > OrderedConfiguration<HttpServletRequestFilter> configuration, > @InjectService("HttpSessionContextIntegrationFilter") > HttpServletRequestFilter httpSessionContextIntegrationFilter, > @InjectService("AuthenticationProcessingFilter") > HttpServletRequestFilter authenticationProcessingFilter, > @InjectService("RememberMeProcessingFilter") > HttpServletRequestFilter rememberMeProcessingFilter, > @InjectService("SecurityContextHolderAwareRequestFilter") > HttpServletRequestFilter > securityContextHolderAwareRequestFilter, > @InjectService("AnonymousProcessingFilter") > HttpServletRequestFilter anonymousProcessingFilter) { > > configuration.add("acegiHttpSessionContextIntegrationFilter", > httpSessionContextIntegrationFilter, "before:acegi*"); > configuration.add("acegiAuthenticationProcessingFilter", > authenticationProcessingFilter); > configuration.add("acegiRememberMeProcessingFilter", > rememberMeProcessingFilter); > > configuration.add("acegiSecurityContextHolderAwareRequestFilter", > securityContextHolderAwareRequestFilter, > "after:acegiRememberMeProcessingFilter"); > configuration.add("acegiAnonymousProcessingFilter", > anonymousProcessingFilter, > "after:acegiRememberMeProcessingFilter", > "after:acegiAuthenticationProcessingFilter"); > } > > @Marker(AcegiServices.class) > public static AuthenticationProcessingFilter > buildRealAuthenticationProcessingFilter( > @AcegiServices final AuthenticationManager manager, > @AcegiServices final RememberMeServices rememberMeServices, > @Inject @Value("${acegi.check.url}") final String authUrl, > @Inject @Value("${acegi.target.url}") final String targetUrl, > @Inject @Value("${acegi.failure.url}") final String failureUrl) > throws Exception { > AuthenticationProcessingFilter filter = new > AuthenticationProcessingFilter(); > filter.setAuthenticationManager(manager); > filter.setAuthenticationFailureUrl(failureUrl); > filter.setDefaultTargetUrl(targetUrl); > filter.setFilterProcessesUrl(authUrl); > filter.setRememberMeServices(rememberMeServices); > filter.afterPropertiesSet(); > return filter; > } > > @Marker(AcegiServices.class) > public static HttpServletRequestFilter > buildAuthenticationProcessingFilter(final > AuthenticationProcessingFilter filter) > throws Exception { > return new HttpServletRequestFilterWrapper(filter); > } > > > NOW, in my LibraryModule I have the following methods that I believe > should override the AuthenticationProcessingFilter appropriately but > still ends up resulting in a null for ApplicationStateManager. > > public static AuthenticationProcessingFilter > buildMyAuthenticationProcessingFilter( > @AcegiServices final AuthenticationManager manager, > @AcegiServices final RememberMeServices rememberMeServices, > @InjectService ("ApplicationStateManager") > ApplicationStateManager asm, > @Inject @Value( "${acegi.check.url}" ) final String authUrl, > @Inject @Value( "${acegi.target.url}" ) final String > targetUrl, > @Inject @Value( "${acegi.failure.url}" ) final String > failureUrl > ) throws Exception > { > AuthenticationProcessingFilter filter = new > CustomAuthenticationProcessingFilter(asm); > filter.setAuthenticationManager(manager); > filter.setAuthenticationFailureUrl(failureUrl); > filter.setDefaultTargetUrl(targetUrl); > filter.setFilterProcessesUrl(authUrl); > filter.setRememberMeServices(rememberMeServices); > filter.afterPropertiesSet(); > return filter; > } > > public static void > contributeAliasOverrides(@InjectService("MySaltSource") > SaltSourceService saltSource, > @InjectService("MyAuthenticationProcessingFilter") > AuthenticationProcessingFilter authenticationProcessingFilter, > Configuration<AliasContribution> configuration) > { > > configuration.add(AliasContribution.create(SaltSourceService.class, > saltSource)); > > configuration > .add(AliasContribution.create(AuthenticationProcessingFilter.class, > authenticationProcessingFilter)); > } > > Now I am not typically the type to post this much detail as I know it > is difficult to help with such an issue, but the Tapestry 5 > documentation is lacking in how everything gets weaved together and > what standard patterns are useful, IMHO. So if someone could please > help me to figure out how I can pass the AppliationStateManager > appropriately I would appreciate it. > > BTW, I am using .15 > > Thanks in advance for any help, > > Keith > > On Nov 1, 2008, at 1:13 PM, Howard Lewis Ship wrote: > > > When you contribute a filter, you need to instantiate it. Generally > > it looks something like: > > > > public void > > contributeRequestHandler(OrderedConfiguration<RequestFilter> > > configuration, ObjectLocator locator) > > { > > configuration.add("MyFilter", locator.autobuild(MyFilter.class)); > > } > > > > The ObjectLocator is a resource of the RequestHandler service that can > > be injected into contribute methods for the RequestHandler service and > > allows access to other services within the IoC Registry; it also > > handle instantiation of objects with injection for you. So MyFilter > > doesn't have to be a service but can still be injected. Contributing > > an object instance to a filter does not do any injection, but > > autobuild() does. > > > > In the current .16 snapshot, you can use @Inject on fields of MyFilter > > in addition to injection through the constructor. This was added > > because people got confused: in pages and components you use @Inject > > on fields, but in service implementation, 5.0.15 requires that > > dependencies be passed through the constructor. Again, 5.0.16 allows > > you to code services and other objects more consistently (but with the > > runtime overhead of using reflection to update the private fields). > > > > On Fri, Oct 31, 2008 at 2:41 PM, Keith Bottner <[EMAIL PROTECTED]> > > wrote: > >> Is it possible to retrieve ApplicationStateManager from within a > >> Filter? > >> > >> I tried using an @Inject and it always returns null. > >> I tried placing it in the constructor of the filter but when it is > >> accessed > >> it is null. > >> > >> Is there a recommend way of doing this or is it even advisable? > >> > >> Thanks in advance for your help. > >> > >> Keith > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [EMAIL PROTECTED] > >> For additional commands, e-mail: [EMAIL PROTECTED] > >> > >> > > > > > > > > -- > > Howard M. Lewis Ship > > > > Creator Apache Tapestry and Apache HiveMind > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]