- 浏览: 1071309 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
1.首先写一个ACCOUNT类(业务逻辑类)
public class Account {
public void operation()
{
System.out.println("operation...");
}
}
2.写一个执行安全日志的类类似AOP操作
public class SecurityChecker {
public static void checkSecurity() {
System.out.println("SecurityChecker.checkSecurity ...");
//TODO real security check
}
}
3.写一个访问Account字节码文件的类
import org.objectweb.asm.ClassAdapter;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.MethodVisitor;
public class AddSecurityCheckClassAdapter extends ClassAdapter {
public AddSecurityCheckClassAdapter(ClassVisitor cv) {
super(cv);
}
public MethodVisitor visitMethod(int access, String name, String desc,
String signature, String[] exceptions) {
MethodVisitor mv = cv.visitMethod(access, name, desc, signature,exceptions);
MethodVisitor wrappedMv = mv;
if (mv != null) {
//对于 "operation" 方法
if (name.equals("operation")) {
//使用自定义 MethodVisitor,实际改写方法内容
wrappedMv = new AddSecurityCheckMethodAdapter(mv);
}
}
return wrappedMv;
}
}
4.写一个访问某个字节码文件中方法的类
import org.objectweb.asm.MethodAdapter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
public class AddSecurityCheckMethodAdapter extends MethodAdapter implements
MethodVisitor {
public AddSecurityCheckMethodAdapter(MethodVisitor mv) {
super(mv);
// TODO Auto-generated constructor stub
}
public void visitCode() {
visitMethodInsn(Opcodes.INVOKESTATIC, "SecurityChecker",
"checkSecurity", "()V");
}
}
5.写一个整合类,将上面的类进行整合,并生成一个新的Account.class文件,该文件是被修改了方法的类文件,包含了安全检查方法
import java.io.File;
import java.io.FileOutputStream;
import org.objectweb.asm.ClassAdapter;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
public class Generator {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
ClassReader cr = new ClassReader("Account");
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
ClassAdapter classAdapter = new AddSecurityCheckClassAdapter(cw);
cr.accept(classAdapter, ClassReader.SKIP_DEBUG);
byte[] data = cw.toByteArray();
File file = new File("D://workspace//ASM//WebRoot//WEB-INF//classes//Account.class");
FileOutputStream fout = new FileOutputStream(file);
fout.write(data);
fout.close();
}
}
6.写一个测试类,测试你新生成的Account.class
public class Test {
public static void main(String[] args) {
Account account = new Account();
account.operation();
}
}
7.得到的结果
SecurityChecker.checkSecurity ...
operation...
总结,该方法的核心思想就是利用ASM的API直接去修改某一个.class文件强行插入某段代码
发表评论
-
java spring整合websocket教程
2018-03-30 14:30 688在javaweb项目开发中,我们经常可能需要websocke ... -
myeclipse 项目之间类进行引用
2014-11-19 15:54 966相关解决方案: eclipse的Web项目引用方式:(其实相 ... -
myeclipse8 每次启动内存都不够用的解决方案
2014-11-11 15:34 773最近可能由于公司项目大了,启动MyEclipse后经常提示 ... -
web项目集成log4j
2014-11-06 12:39 725Log4j基本使用方法 Log4j由三个重要的组件构成:日 ... -
使用 Jersey 和 Apache Tomcat 构建 RESTful Web 服务
2011-10-25 14:09 1530RESTful Web 服务简介 REST 在 2000 年 ... -
确定操作系统位计数(64位还是32位(X86))
2011-09-30 08:36 1250在此部分查找计算机 ... -
解决“无法删除 指定的文件名无效或太长”的问题
2011-09-16 14:07 2525解决“无法删除 指定的文件名无效或太长”的问题 ... -
网站应用通过139邮箱发送短信做到日志提醒功能
2011-09-15 09:36 1824首先在139注册一个邮箱,然后再邮箱设置中设置收到邮件通过短信 ... -
javamail发送邮件遇到的问题
2011-09-15 09:32 1208今天在用myeclipse写mial功能的时候,想调试一下程序 ... -
http协议的学习笔记
2011-03-01 10:56 1692HTTP请求行 格式:请求 ... -
Logback用户手册中文版.pdf
2011-02-14 16:57 2030Logback用户手册中文版.pdf -
JAVA编写的预警系统
2011-02-10 11:00 6341预警系统 <!-- start content --& ... -
Mediawiki 简明架设指南
2011-02-10 10:03 4657在 Debian/Linux 下 1. 安装程序 sh ... -
xsl 常用.jsp
2011-02-10 09:28 1625现在用的都是有规分律数据, 特殊的数据用XSL. DOM4J ... -
SVN 入门指南
2011-01-14 11:17 1004SVN 入门指南 -
FreeMaker中文手册
2011-01-14 11:15 1051FreeMaker中文手册 -
查看某个网段具体哪些IP没有被使用的命令
2010-11-29 09:01 2907通过运行cmd然后在DOS命令下运行下面程序,表示查看192. ... -
xsl 取数据的时候,当用for-each循环取得数据,怎么取第一行的数据
2010-11-08 11:35 2359需求,打印表格的时候,用for-each 来取得数据,当取到第 ... -
项目过程中,对于绝对路径和相对路径的总结
2010-09-11 09:20 12451.基本概念的理解 绝对路径:绝对路径就是你的主页上的文 ... -
mysql经典语句
2010-09-09 18:18 1256show databases;show tables from ...
相关推荐
oracleasm-2.6.18-164.el5-2.0.5-1.el5.x86_64.rpm
oracleasm-2.6.18-194.32.1.el5-2.0.5-1.el5.x86_64.rpm
标题 "asm-debug-all-3.3-sources.jar.zip" 提供了有关文件的重要信息,它是一个包含源代码的压缩包,版本为3.3,与ASM(Java字节码操作库)的调试功能有关。ASM是一个强大的开源Java字节码操控和分析框架,常用于...
oracleasm-2.6.18-8.el5-2.0.4-1.el5.i686.rpm
REDHAT安装ASM时必须安装的包。一共有三个,分别是 oracleasm-support-2.1.7-1.el5.i386.rpm oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm oracleasmlib-2.0.4-1.el5.i386.rpm
oracleasm-2.6.18-194.el5xen-2.0.5-1.el5.x86_64.rpm
oracleasm-2.6.18-128.el5-2.0.5-1.el5.i686.rpm oracleasmlib-2.0.4-1.el5.i386.rpm oracleasm-support-2.1.1-1.el4.i386.rpm X64: oracleasm-support-2.1.8-1.el5.x86_64.rpm oracleasmlib-2.0.4-1.el5.x86_64....
oracleasm-support-2.1.4-1.el5.x86_64.rpm 适用于内核为2.6.18-164.el5环境使用
赠送jar包:asm-all-5.0.2.jar; 赠送原API文档:asm-all-5.0.2-javadoc.jar; 赠送源代码:asm-all-5.0.2-sources.jar; 赠送Maven依赖信息文件:asm-all-5.0.2.pom; 包含翻译后的API文档:asm-all-5.0.2-javadoc-...
oracleasm工具,lib和source 在搭建集群使用asm时候使用
asm-1.3.3.jar, asm-1.3.4.jar, asm-1.3.5.jar, asm-1.4.1.jar, asm-1.4.2.jar, asm-1.4.3.jar, asm-1.4.jar, asm-1.5.1.jar, asm-1.5.2.jar, asm-1.5.3.jar, asm-2.0.jar, asm-2.1.jar, asm-2.2.1-sources.jar, asm...
在给定的文件中,我们有两个相关的 RPM 包:`oracleasm-support-2.0.4-1.el5.i386.rpm` 和 `oracleasmlib-2.0.2-1.i386.rpm`。 **Oracle ASM Support**: `oracleasm-support-2.0.4-1.el5.i386.rpm` 包含了对 Oracle...
【描述】"cglib动态代理模式jar包 cglib-2.2.jar asm-tree.jar asm-commons.jar asm.jar" 指出,这些jar文件是CGlib库的一部分,它是一个强大的、高性能的代码生成库,广泛用于创建Java动态代理和增强现有类。...
标题中的"asm-commons-2.2.1-sources.jar.zip"是一个压缩文件,它包含了ASM Commons库的源代码版本2.2.1。ASM Commons是ASM库的一个扩展,ASM是一个广泛使用的Java字节码操控和分析框架。ASM Commons提供了在ASM基础...
centos 7 oracleasm-support el7 rpm 安装包
oracleasm-2.6.18-53.el5-2.0.4-1.el5.i686.rpm
oracleasm-support-2.1.7-1.el5.i386.rpm
oracleasm-support-2.1.3-1.el5.i386.rpm
oracleasm-2.6.9-42.EL-2.0.3-1.i686.rpm 下载