I am trying to get the component inside an advice and if the page invoked is
extends "SecurePage", then I have to check the security credentials on that
request. A typical cross-cutting concern which is best served by an advice.
But its not working. Anything I am doing wrong here? Could this below
problem be a classloader problem?


@Match("SecureInterface")
public static void adviceSecureRequest(MethodAdviceReceiver receiver, final
Request request, 
                                                final ComponentClassResolver
componentClassResolver, 
                                                final RequestPageCache
cache, final AuthService authService){
    
    MethodAdvice advice = new MethodAdvice(){
        public void advise(Invocation invocation){
            //SOME PLUMBING CODE TO GET TO THE COMPONENT.
                //DON'T KNOW IF THERE IS AN EASIER WAY.
            String path = request.getPath();
            int actionEvent = path.lastIndexOf('.');
            if (actionEvent != -1) 
                path = path.substring(0, actionEvent);
    
            int nextslashx = path.length();
            String pageName;
            while (true) {
                pageName = path.substring(1, nextslashx);
                if (!pageName.endsWith("/") &&
componentClassResolver.isPageName(pageName)) 
                    break;
                    nextslashx = path.lastIndexOf('/', nextslashx - 1);
                    if (nextslashx <= 1) 
                        break;
              }

              if (componentClassResolver.isPageName(pageName)){
                  Page page = cache.get(pageName);
                  //NOW WE HAVE A HANDLE ON THE COMPONENT
                  Component component = page.getRootComponent();

                  //THE BELOW IF CONDITION ALWAYS FAILS.
                       //AS AN EXAMPLE, THIS "component" could be a
"PayPage" page which extends "SecurePage". 
                      //SO component HERE SHOULD ACTUALLY BE "PayPage" AND
THEREFORE A "SecurePage". BUT, THE CONDITION ISN'T SATISFIED
                     //I DOUBLE CHECKED THE HASHCODE of "PayPage" in
BeginRender of PayPage and that of "component" over here AND BOTH ARE
IDENTICAL.
                     //SO I AM CONFUSED WHY THE BELOW CONDITION WOULD FAIL.
                     //IS THIS A CLASSLOADER PROBLEM???? IF THE HASHCODE IS
THE SAME
                     //THEN THEY ARE THE SAME OBJECTS, SO WHY IS THE BELOW
CONDITION FAILING?
                    if (component instanceof SecurePage) 
                           
authService.checkSecurity(invocation.getParameter(0));  // I NEED TO CALL
THIS TO CHECK THE CREDENTIALS IF THE PAGE IS A "SecurePage"
                   
              }
            invocation.proceed();
        } // end advice method of inner class
    }; // end inner class
    receiver.adviseAllMethods(advice);
}
-- 
View this message in context: 
http://old.nabble.com/How-to-get-the-Component-inside-advice--tp28100055p28100055.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


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

Reply via email to