Hi,

Of course it is null, if you don't provide it as a t5 service or pass it
wrong to your RequiresLoginFilter.
How does your code look after your changes?
Provide full stack trace after your changes pls.

This is also weird imho:
@SuppressWarnings("unchecked")
      public static void
contributeComponentRequestHandler(OrderedConfiguration configuration) {
              configuration.addInstance("RequiresLogin",
RequiresLoginFilter.class);
      }

Correct me if i am wrong, but don't you have to provide the
RequiresLoginFilter as a t5 service?

Passing the request to the constructor is ok, but anyway this is not the
current issue.

whoops, the request is null in your t5 page class? I can not believe that.


With kind regards
David


Am 07.08.2013 18:11, schrieb Will N.:
>
> I have changed that  but the exception remains... seems like the the
> request the AuthenticatorImpl.java is null;
>
>     public boolean isLoggedIn() {
>
>         org.apache.tapestry5.services.Session session =
> request.getSession(true);  // request is null
>         if (session != null) { return session.getAttribute(AUTH_TOKEN)
> != null; }
>             return false;
>
>     }
>
> Am i Suppose to pass the request to the constructor or to add anything
> else in the AppModule?
>
> Am 07.08.2013 17:18, schrieb D.R.:
>> Hi,
>>
>> where is the registration of AuthenticatorImp implements
>> AuthenticatorInterface? I can not see it in your binder.bind
>>
>> Your constructor looks weird:
>> public void PageAccessFilter in class RequiresLoginFilter ???
>>
>> You should pass the interface there, not the impl.
>>
>>
>> Kind regards
>> David
>>
>> Am 07.08.2013 16:12, schrieb Willy Browne:
>>> thanks for the help. I removed my Interface and now i get a
>>> NullPointerException
>>>     *
>>> RequiresLoginFilter.dispatchedToLoginPage(RequiresLoginFilter.java:66)
>>>     *
>>> services.RequiresLoginFilter.handlePageRender(RequiresLoginFilter.java:57)
>>>     *
>>> org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeActivePageName.java:47)
>>>     *
>>> org.apache.tapestry5.internal.services.RootPathDispatcher.dispatch(RootPathDispatcher.java:66)
>>>     *
>>> org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:302)
>>>     * .services.PmsModule$1.service(PmsModule.java:115)
>>>     *
>>> org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
>>>     *
>>> org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:902)
>>>     *
>>> org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:892)
>>>     *
>>> org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90)
>>>     *
>>> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:105)
>>>     *
>>> org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:95)
>>>     *
>>> org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
>>>     *
>>> org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:119)
>>>     *
>>> org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:253)
>>>     *
>>> org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53)
>>>     *
>>> org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
>>>     *
>>> org.apache.tapestry5.services.TapestryModule$1.service(TapestryModule.java:852)
>>>     *
>>> org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:171)
>>>
>>> public class RequiresLoginFilter implements ComponentRequestFilter {
>>> private PageRenderLinkSource renderLinkSource;
>>>
>>> private ComponentSource componentSource;
>>> private Response response;
>>>
>>> private AuthenticatorImp authService;
>>>
>>> public void PageAccessFilter(PageRenderLinkSource renderLinkSource,
>>> ComponentSource componentSource, Response response,
>>> AuthenticatorImp authService) {
>>>
>>> this.renderLinkSource = renderLinkSource;
>>> this.componentSource = componentSource;
>>> this.response = response;
>>> this.authService = authService;
>>>
>>> }
>>>
>>> public void handleComponentEvent(
>>> ComponentEventRequestParameters parameters,
>>> ComponentRequestHandler handler) throws IOException {
>>>
>>> if (dispatchedToLoginPage(parameters.getActivePageName())) {
>>> return;
>>> }
>>>
>>> handler.handleComponentEvent(parameters);
>>>
>>> }
>>>
>>> public void handlePageRender(PageRenderRequestParameters parameters,
>>> ComponentRequestHandler handler) throws IOException {
>>> if (dispatchedToLoginPage(parameters.getLogicalPageName())) {
>>> return;
>>> }
>>>
>>> handler.handlePageRender(parameters);
>>> }
>>>
>>> private boolean dispatchedToLoginPage(String pageName) throws
>>> IOException {
>>> if (authService.isLoggedIn()) {  // line 66
>>> return false;
>>> }
>>>
>>> Component page = componentSource.getPage(pageName);
>>>
>>> if (!page.getClass().isAnnotationPresent(RequiresLogin.class)) {
>>> return false;
>>> }
>>>
>>> Link link = renderLinkSource.createPageRenderLink("Login");
>>>
>>> response.sendRedirect(link);
>>>
>>> return true;
>>> }
>>> }
>>>
>>>
>>> public class RequiresLoginFilter implements ComponentRequestFilter {
>>> private PageRenderLinkSource renderLinkSource;
>>>
>>> private ComponentSource componentSource;
>>> private Response response;
>>>
>>> private AuthenticatorImp authService;
>>>
>>> public void PageAccessFilter(PageRenderLinkSource renderLinkSource,
>>> ComponentSource componentSource, Response response,
>>> AuthenticatorImp authService) {
>>>
>>> this.renderLinkSource = renderLinkSource;
>>> this.componentSource = componentSource;
>>> this.response = response;
>>> this.authService = authService;
>>>
>>> }
>>>
>>> public void handleComponentEvent(
>>> ComponentEventRequestParameters parameters,
>>> ComponentRequestHandler handler) throws IOException {
>>>
>>> if (dispatchedToLoginPage(parameters.getActivePageName())) {
>>> return;
>>> }
>>>
>>> handler.handleComponentEvent(parameters);
>>>
>>> }
>>>
>>> public void handlePageRender(PageRenderRequestParameters parameters,
>>> ComponentRequestHandler handler) throws IOException {
>>> if (dispatchedToLoginPage(parameters.getLogicalPageName())) {
>>> return;
>>> }
>>>
>>> handler.handlePageRender(parameters);
>>> }
>>>
>>> private boolean dispatchedToLoginPage(String pageName) throws
>>> IOException {  // line 57
>>> if (authService.isLoggedIn()) {
>>> return false;
>>> }
>>>
>>> Component page = componentSource.getPage(pageName);
>>>
>>> if (!page.getClass().isAnnotationPresent(RequiresLogin.class)) {
>>> return false;
>>> }
>>>
>>> Link link = renderLinkSource.createPageRenderLink("Login");
>>>
>>> response.sendRedirect(link);
>>>
>>> return true;
>>> }
>>> }
>>>
>>>
>>>
>>> public class AuthenticatorImp implements AuthenticatorInterface{
>>>
>>> public static final String AUTH_TOKEN = "authToken";
>>> /**
>>>   *
>>>   */
>>> public AuthenticatorImp() {
>>> super();
>>> // TODO Auto-generated constructor stub
>>> }
>>>
>>> /**
>>>   * @param request
>>>   */
>>> public AuthenticatorImp(Request request) {
>>> super();
>>> this.request = request;
>>> }
>>>
>>>
>>>
>>>
>>> @Inject
>>> private Request request;
>>> public Mitarbeiter getLoggedUser() {
>>>   Mitarbeiter user = null;
>>>
>>>          if (isLoggedIn())
>>>              user = (Mitarbeiter)
>>> request.getSession(true).getAttribute(AUTH_TOKEN);
>>>                   else
>>>              throw new IllegalStateException("The user is not logged
>>> ! ");
>>>                   return user;
>>> }
>>>
>>> public boolean isLoggedIn() {
>>> org.apache.tapestry5.services.Session session = 
>>> request.getSession(true);
>>>          if (session != null) { return
>>> session.getAttribute(AUTH_TOKEN) != null; }
>>>          return false;
>>>
>>> }
>>>
>>> @SuppressWarnings("unchecked")
>>> public void login(String nickName, String password,
>>> org.hibernate.Session session)
>>> throws NoSuchAlgorithmException, UnsupportedEncodingException {
>>> MitarbeiterDaoImpl mitarbeiterDao = new MitarbeiterDaoImpl(
>>> Mitarbeiter.class, session);
>>> Mitarbeiter authUser = mitarbeiterDao.authenticate(nickName,
>>> Encrypt.MD5(password));
>>>
>>> try{
>>> request.getSession(true).setAttribute(AUTH_TOKEN, authUser);
>>>      }
>>>      catch(NullPointerException e){
>>>      System.out.println("Beim Einlogen ist ein fehler aufgetreten");
>>>      }
>>>           }
>>>
>>> public void logout() {
>>> org.apache.tapestry5.services.Session session =
>>> request.getSession(false);
>>>          if (session != null)
>>>          {
>>>              session.setAttribute(AUTH_TOKEN, null);
>>>              session.invalidate();
>>>          }
>>> }
>>>
>>>
>>> }
>>>
>>> ________________________________
>>>   De : Taha Hafeez Siddiqi <tawus.tapes...@gmail.com>
>>> À : Tapestry users <users@tapestry.apache.org>
>>> Envoyé le : Mardi 6 août 2013 14h41
>>> Objet : Re: Securing page with Tapestry
>>>  
>>> Are you defining your own ComponentRequestFilter interface? As you
>>> have included the code for that I am assuming you have.
>>>
>>> You have to implement Tapestry's ComponentRequestFilter, not your
>>> own as you can't contribute to the RequestHandler any other
>>> implementation.
>>>
>>> regards
>>> Taha
>>>
>>> On 06-Aug-2013, at 5:53 PM, Will N. <llcool_wil...@yahoo.fr> wrote:
>>>
>>>> Am 06.08.2013 14:13, schrieb Thiago H de Paula Figueiredo:
>>>>> I'm sorry, I should have asked for your ComponentRequestFilter
>>>>> implementation source too. ;)
>>>>>
>>>>> On Tue, 06 Aug 2013 08:31:15 -0300, Will N.
>>>>> <llcool_wil...@yahoo.fr> wrote:
>>>>>
>>>>>> Am 06.08.2013 13:25, schrieb Thiago H de Paula Figueiredo:
>>>>>>> On Tue, 06 Aug 2013 05:10:37 -0300, Will N.
>>>>>>> <llcool_wil...@yahoo.fr> wrote:
>>>>>>>
>>>>>>>> Hi,
>>>>>>> Hi!
>>>>>>>
>>>>>>>> I am trying secure some pages of my application as shown in
>>>>>>>> this tutorial.
>>>>>>>> http://tapestryjava.blogspot.co.uk/search/label/security
>>>>>>>> But I am having following error message when I start the
>>>>>>>> application.
>>>>>>>> Since the RequiresLoginFilte class implements the
>>>>>>>> ComponentRequestFilter interface, I am confused about the
>>>>>>>> coertion error!
>>>>>>> The error is weird. Could you post your
>>>>>>> PmsModule.contributeComponentRequestHandler() method
>>>>>> /**
>>>>>>    * This module is automatically included as part of the
>>>>>> Tapestry IoC Registry,
>>>>>>    * it's a good place to configure and extend Tapestry, or to
>>>>>> place your own
>>>>>>    * service definitions. spring
>>>>>>    */
>>>>>> public class PmsModule {
>>>>>> //    public static void bind(ServiceBinder binder) {
>>>>>> //        // binder.bind(MyServiceInterface.class,
>>>>>> MyServiceImpl.class);
>>>>>> //
>>>>>> //        // Make bind() calls on the binder object to define
>>>>>> most IoC services.
>>>>>> //        // Use service builder methods (example below) when the
>>>>>> implementation
>>>>>> //        // is provided inline, or requires more initialization
>>>>>> than simply
>>>>>> //        // invoking the constructor.
>>>>>> //        binder.bind(ArbeitspaketDao.class,
>>>>>> ArbeitspaketDaoImpl.class);
>>>>>> //        binder.bind(AufgabeDao.class, AufgabeDaoImpl.class);
>>>>>> //        binder.bind(BasicDao.class, BasicDaoImpl.class);
>>>>>> //        binder.bind(FunktionDao.class, FunktionDaoImpl.class);
>>>>>> ////        binder.bind(GrantedAuthorityBeanDao.class,
>>>>>> ////                GrantedAuthorityBeanDaoImpl.class);
>>>>>> //        binder.bind(MitarbeiterDao.class,
>>>>>> MitarbeiterDaoImpl.class);
>>>>>> //        binder.bind(MitarbeiterProjektDao.class,
>>>>>> //                MitarbeiterProjektDaoImpl.class);
>>>>>> //        binder.bind(ModulDao.class, ModulDaoImpl.class);
>>>>>> //        binder.bind(PersonMonatDao.class,
>>>>>> PersonMonatDaoImpl.class);
>>>>>> //        binder.bind(UserDataDao.class, UserDataDaoImpl.class);
>>>>>> //        binder.bind(ProjektDao.class, ProjektDaoImpl.class);
>>>>>> //        binder.bind(UnteraufgabeDao.class,
>>>>>> UnteraufgabeDaoImpl.class);
>>>>>> //        binder.bind(UnterunteraufgabeDao.class,
>>>>>> UnterunteraufgabeDaoImpl.class);
>>>>>> //
>>>>>> //    }
>>>>>>
>>>>>>       public static void contributeFactoryDefaults(
>>>>>>               MappedConfiguration<String, Object> configuration) {
>>>>>>           // The application version number is incorprated into
>>>>>> URLs for some
>>>>>>           // assets. Web browsers will cache assets because of
>>>>>> the far future
>>>>>>           // expires
>>>>>>           // header. If existing assets are changed, the version
>>>>>> number should
>>>>>>           // also
>>>>>>           // change, to force the browser to download new
>>>>>> versions. This overrides
>>>>>>           // Tapesty's default
>>>>>>           // (a random hexadecimal number), but may be further
>>>>>> overriden by
>>>>>>           // DevelopmentModule or
>>>>>>           // QaModule.
>>>>>> configuration.override(SymbolConstants.APPLICATION_VERSION,
>>>>>>                   "1.0-SNAPSHOT");
>>>>>>       }
>>>>>>
>>>>>>       public static void contributeApplicationDefaults(
>>>>>>               MappedConfiguration<String, Object> configuration) {
>>>>>>           // Contributions to ApplicationDefaults will override
>>>>>> any contributions
>>>>>>           // to
>>>>>>           // FactoryDefaults (with the same key). Here we're
>>>>>> restricting the
>>>>>>           // supported
>>>>>>           // locales to just "en" (English). As you add localised
>>>>>> message catalogs
>>>>>>           // and other assets,
>>>>>>           // you can extend this list of locales (it's a comma
>>>>>> separated series of
>>>>>>           // locale names;
>>>>>>           // the first locale name is the default when there's no
>>>>>> reasonable
>>>>>>           // match).
>>>>>>           // configuration.add(SymbolConstants.SUPPORTED_LOCALES,
>>>>>> "en");
>>>>>>           configuration.add(SymbolConstants.SUPPORTED_LOCALES,
>>>>>> "de");
>>>>>>           configuration.add(SymbolConstants.COMPRESS_WHITESPACE,
>>>>>> "true");
>>>>>>
>>>>>>       }
>>>>>>
>>>>>>       /**
>>>>>>        * This is a service definition, the service will be named
>>>>>> "TimingFilter".
>>>>>>        * The interface, RequestFilter, is used within the
>>>>>> RequestHandler service
>>>>>>        * pipeline, which is built from the RequestHandler service
>>>>>> configuration.
>>>>>>        * Tapestry IoC is responsible for passing in an
>>>>>> appropriate Logger
>>>>>>        * instance. Requests for static resources are handled at a
>>>>>> higher level, so
>>>>>>        * this filter will only be invoked for Tapestry related
>>>>>> requests.
>>>>>>        * <p/>
>>>>>>        * <p/>
>>>>>>        * Service builder methods are useful when the
>>>>>> implementation is inline as
>>>>>>        * an inner class (as here) or require some other kind of
>>>>>> special
>>>>>>        * initialization. In most cases, use the static bind()
>>>>>> method instead.
>>>>>>        * <p/>
>>>>>>        * <p/>
>>>>>>        * If this method was named "build", then the service id
>>>>>> would be taken from
>>>>>>        * the service interface and would be "RequestFilter".
>>>>>> Since Tapestry
>>>>>>        * already defines a service named "RequestFilter" we use
>>>>>> an explicit
>>>>>>        * service id that we can reference inside the contribution
>>>>>> method.
>>>>>>        */
>>>>>>       public RequestFilter buildTimingFilter(final Logger log) {
>>>>>>           return new RequestFilter() {
>>>>>>               public boolean service(Request request, Response
>>>>>> response,
>>>>>>                       RequestHandler handler) throws IOException {
>>>>>>                   long startTime = System.currentTimeMillis();
>>>>>>
>>>>>>                   try {
>>>>>>                       // The responsibility of a filter is to
>>>>>> invoke the
>>>>>>                       // corresponding method
>>>>>>                       // in the handler. When you chain multiple
>>>>>> filters together,
>>>>>>                       // each filter
>>>>>>                       // received a handler that is a bridge to
>>>>>> the next filter.
>>>>>>
>>>>>>                       return handler.service(request, response);
>>>>>>                   } finally {
>>>>>>                       long elapsed = System.currentTimeMillis() -
>>>>>> startTime;
>>>>>>
>>>>>>                       log.info(String.format("Request time: %d
>>>>>> ms", elapsed));
>>>>>>                   }
>>>>>>               }
>>>>>>           };
>>>>>>       }
>>>>>>
>>>>>>       /**
>>>>>>        * This is a contribution to the RequestHandler service
>>>>>> configuration. This
>>>>>>        * is how we extend Tapestry using the timing filter. A
>>>>>> common use for this
>>>>>>        * kind of filter is transaction management or security.
>>>>>> The @Local
>>>>>>        * annotation selects the desired service by type, but only
>>>>>> from the same
>>>>>>        * module. Without @Local, there would be an error due to
>>>>>> the other
>>>>>>        * service(s) that implement RequestFilter (defined in
>>>>>> other modules).
>>>>>>        */
>>>>>>       public void
>>>>>> contributeRequestHandler(OrderedConfiguration<RequestFilter>
>>>>>> configuration, @Local RequestFilter filter) {
>>>>>>           // Each contribution to an ordered configuration has a
>>>>>> name, When
>>>>>>           // necessary, you may
>>>>>>           // set constraints to precisely control the invocation
>>>>>> order of the
>>>>>>           // contributed filter
>>>>>>           // within the pipeline.
>>>>>>
>>>>>>           configuration.add("Timing", filter);
>>>>>>       }
>>>>>>
>>>>>>
>>>>>>       @SuppressWarnings("unchecked")
>>>>>>       public static void
>>>>>> contributeComponentRequestHandler(OrderedConfiguration
>>>>>> configuration) {
>>>>>>               configuration.addInstance("RequiresLogin",
>>>>>> RequiresLoginFilter.class);
>>>>>>
>>>>>>       }
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> }
>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>>
>>>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>>>
>>>>
>>>> import java.io.IOException;
>>>>
>>>> import org.apache.tapestry5.services.ComponentEventRequestParameters;
>>>> import org.apache.tapestry5.services.ComponentRequestHandler;
>>>> import org.apache.tapestry5.services.PageRenderRequestParameters;
>>>>
>>>>
>>>> /**
>>>> * Filter interface for {@link
>>>> org.apache.tapestry5.services.ComponentRequestHandler}.
>>>> */
>>>> /**
>>>> * Our implementation of this filter will check the page referenced
>>>> in the request to see if it has the annotation.
>>>> * If the annotation is present and the user has not yet logged in,
>>>> we'll redirect to the Login page.
>>>> * When a redirect is not necessary, we delegate to the next handler
>>>> in the pipeline2:
>>>> */
>>>> public interface ComponentRequestFilter
>>>> {
>>>>      /**
>>>>       * Handler for a component action request which will trigger
>>>> an event on a component and use the return value to
>>>>       * send a response to the client (typically, a redirect to a
>>>> page render URL).
>>>>       *
>>>>       * @param parameters defining the request
>>>>       * @param handler    next handler in the pipeline
>>>>       */
>>>>      void handleComponentEvent(ComponentEventRequestParameters
>>>> parameters, ComponentRequestHandler handler)
>>>>              throws IOException;
>>>>
>>>>      /**
>>>>       * Invoked to activate and render a page. In certain cases,
>>>> based on values returned when activating the page, a
>>>>       * {@link
>>>> org.apache.tapestry5.services.ComponentEventResultProcessor} may be
>>>> used to send an alternate response
>>>>       * (typically, a redirect).
>>>>       *
>>>>       * @param parameters defines the page name and activation context
>>>>       * @param handler    next handler in the pipeline
>>>>       */
>>>>      void handlePageRender(PageRenderRequestParameters parameters,
>>>> ComponentRequestHandler handler) throws IOException;
>>>> }
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> import java.io.IOException;
>>>>
>>>> import org.apache.tapestry5.Link;
>>>> import org.apache.tapestry5.runtime.Component;
>>>> import org.apache.tapestry5.services.ComponentEventRequestParameters;
>>>> import org.apache.tapestry5.services.ComponentRequestHandler;
>>>> import org.apache.tapestry5.services.ComponentSource;
>>>> import org.apache.tapestry5.services.PageRenderLinkSource;
>>>> import org.apache.tapestry5.services.PageRenderRequestParameters;
>>>> import org.apache.tapestry5.services.Response;
>>>>
>>>>
>>>> import com.example.pms.annotations.*;
>>>>
>>>>
>>>> public class RequiresLoginFilter implements ComponentRequestFilter {
>>>>
>>>>    private PageRenderLinkSource renderLinkSource;
>>>>
>>>>    private ComponentSource componentSource;
>>>>
>>>>    private Response response;
>>>>
>>>> //  private final AuthenticationService authService;
>>>>    private AuthenticatorImp authService;
>>>>
>>>>
>>>>    public void PageAccessFilter(PageRenderLinkSource
>>>> renderLinkSource, ComponentSource componentSource,
>>>>                                    Response response,
>>>> AuthenticatorImp authService) {
>>>>
>>>>      this.renderLinkSource = renderLinkSource;
>>>>      this.componentSource = componentSource;
>>>>      this.response = response;
>>>>      this.authService = authService;
>>>>
>>>>    }
>>>>
>>>>    public void handleComponentEvent(
>>>>        ComponentEventRequestParameters parameters,
>>>>        ComponentRequestHandler handler) throws IOException {
>>>>
>>>>      if (dispatchedToLoginPage(parameters.getActivePageName())) {
>>>>        return;
>>>>      }
>>>>
>>>>      handler.handleComponentEvent(parameters);
>>>>
>>>>    }
>>>>
>>>>    public void handlePageRender(PageRenderRequestParameters
>>>> parameters,
>>>>        ComponentRequestHandler handler) throws IOException {
>>>>
>>>>      if (dispatchedToLoginPage(parameters.getLogicalPageName())) {
>>>>        return;
>>>>      }
>>>>
>>>>      handler.handlePageRender(parameters);
>>>>    }
>>>>
>>>>    private boolean dispatchedToLoginPage(String pageName) throws
>>>> IOException {
>>>>
>>>>      if (authService.isLoggedIn()) {
>>>>        return false;
>>>>      }
>>>>
>>>>      Component page = componentSource.getPage(pageName);
>>>>
>>>>      if (! page.getClass().isAnnotationPresent(RequiresLogin.class)) {
>>>>        return false;
>>>>      }
>>>>
>>>>      Link link = renderLinkSource.createPageRenderLink("Index");
>>>>
>>>>      response.sendRedirect(link);
>>>>
>>>>      return true;
>>>>    }
>>>> }
>>>>
>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
> For additional commands, e-mail: users-h...@tapestry.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to