2013-02-25 2 views
0

En utilisant la bibliothèque ASM ByteCode, ajoutez un en-tête de demande (UUID) quand un HttpUrlConnection ic créé Ci-dessous est mon code - Aussi obtenir la sortie ===> Ceci est la méthode Http CONNECT !. Mais ne sais pas comment ajouter un en-tête?ASM Bytecode avec HttpURLConnection

package com.eg.agent; 

    import org.objectweb.asm.MethodVisitor; 
    import org.objectweb.asm.Opcodes; 

    public class EgHttpMethodVisitorAdapter extends MethodVisitor { 

     private String methodName; 
     private String className; 
     private String description; 

     public EgHttpMethodVisitorAdapter(MethodVisitor mv , String methodName , String description , String className) { 
      super(Opcodes.ASM4, mv); 
      this.methodName = methodName; 
      this.className = className; 
      this.description = description; 
     } 

     public void visitCode() { 
      super.visitCode(); 
      System.out.println("\t [HTTP URL CONNECTION - Method Name]"+methodName +" Class NAME: "+className + " DESC :"+description); 
      boolean isConnect = false; 
      if(methodName.equals("connect") && description.equals("()V")) 
       isConnect = true; 
      if(isConnect) { 
       mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); 
       mv.visitLdcInsn (" ====> This is Http CONNECT Method!"); 
       mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream","println", "(Ljava/lang/String;)V"); 
      } 
     } 

     public void visitMaxs(int maxStack, int maxLocals) { 
      super.visitMaxs(maxStack + 4, maxLocals); 
     } 
    } 

Répondre

1

Je l'ai résolu .. attaché la méthode visitCode.

public void visitCode() { 
     super.visitCode(); 
     boolean isConnect = false; 
     if(methodName.equals("connect") && description.equals("()V")) 
      isConnect = true; 

     if(isConnect) { 
      // Dynamically add UUID .. 
      mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/util/UUID", "randomUUID", "()Ljava/util/UUID;"); 
      mv.visitVarInsn(Opcodes.ASTORE, 3); 
      mv.visitVarInsn(Opcodes.ALOAD, 0); 
      mv.visitLdcInsn("GUID"); 
      mv.visitVarInsn(Opcodes.ALOAD, 3); 
      mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/UUID", "toString", "()Ljava/lang/String;"); 
      mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/net/HttpURLConnection", "addRequestProperty", "(Ljava/lang/String;Ljava/lang/String;)V"); 
      mv.visitCode(); 
     } 
    } 
0

Vous pouvez trouver ASM FAQ Question 11 utile.

+0

Bonjour Eugene Kuleshov, Merci beaucoup pour votre aide ... :) –

+0

Ne me remerciez pas. Acceptez simplement la réponse. –