JBoss Community

AOP over Tomcat base classes

created by Juliano Daloia de Carvalho in Javassist - View the full discussion

Hi all.

 

     I'm using JavaAssist in one Agent I'm creating to change the behavior of tomcat, but I do not want to customize this on tomcat itself. I want to add some security issues, and for that I want to intercepted the exactly moment when tomcat class receives the client request, and intercepted the last moment that a tomcat class handle the response.

 

    I'm trying to inject a code over two methods on the tomcat base class:

org/apache/catalina/connector/CoyoteAdapter

 

In first instance I just want to put an output message to check when this method is requested.

 

 

try {
     method.insertBefore(
            " { " +
            "     System.out.println( \" -[AOP][CoyoteAdapter][parseSessionId] \" );  " +
            " } ");    
     }
catch (CannotCompileException e){
     System.out.println("["+className+"]["+method.getName()+"]-> " + e.getMessage());
     e.printStackTrace();
}

 

The problem is that the

CannotCompileException 

throws with the information about one attribute which the method I want to change receives as parameter.

 

 

protected void parseSessionId(org.apache.coyote.Request req, Request request) {
     ...
}

 

The class not found is

org.apache.coyote.Request req

 

Bellow follows the stack trace collected.

Prepering to transform org.apache.catalina.connector.CoyoteAdapter
[org/apache/catalina/connector/CoyoteAdapter][parseSessionId]----------------> cannot find org.apache.coyote.Request
javassist.CannotCompileException: cannot find org.apache.coyote.Request
        at javassist.CtBehavior.insertBefore(CtBehavior.java:574)
        at br.com.cedro.tomcat.transformer.Transformer.transform(Transformer.java:84)
        at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
        at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at org.apache.catalina.connector.Connector.initialize(Connector.java:1007)
        at org.apache.catalina.core.StandardService.initialize(StandardService.java:680)
        at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:795)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:524)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:548)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
Caused by: javassist.NotFoundException: org.apache.coyote.Request
        at javassist.ClassPool.get(ClassPool.java:417)
        at javassist.bytecode.Descriptor.toCtClass(Descriptor.java:549)
        at javassist.bytecode.Descriptor.getParameterTypes(Descriptor.java:396)
        at javassist.CtBehavior.getParameterTypes(CtBehavior.java:235)
        at javassist.CtBehavior.insertBefore(CtBehavior.java:555)
        ... 25 more

 

I appreciate the help. I'm exploring tomcat source for 5 days, and I didn't found the exactly point where I need to customize.

 

Tks

 

Juliano.

Reply to this message by going to Community

Start a new discussion in Javassist at Community