Juliano Daloia de Carvalho [
http://community.jboss.org/people/judac] created the
discussion
"AOP over Tomcat base classes"
To view the discussion, visit:
http://community.jboss.org/message/566922#566922
--------------------------------------------------------------
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
[
http://community.jboss.org/message/566922#566922]
Start a new discussion in Javassist at Community
[
http://community.jboss.org/choose-container!input.jspa?contentType=1&...]