spring&maven项目代码混淆的经验分享
2018-06-01 12:04
656 查看
在项目中需要对代码进行混淆加密,使用的是proguard工具,由于项目是使用了spring框架和maven插件,被spring管理的java代码混淆会有很多坑, 在实际项目混淆时得出以下经验(让尽量多的java类可以混淆)。
一、
1. 由spring管理的java类尽量使用注解,而且注解一定要指定bean id名或引用的bean id名。
比如:
这样被混淆后变为如下,这样spring中对应的bean id没变
当然用了注解要在spring xml配置中加上对注解类的扫描。
如
2. 对外暴露的接口类的方法名以及相关参数类不能混淆,但这个接口的实现类可以混淆(当然这个实现类的接口方法不会变化,但类名、属性名可以混淆变化)
3. 被反射引用的类(包括模版引用)需要注意,可以对被引用的部分方法、属性不进行混淆,其他也都混淆。
4. 日志打印的Logger名建议用字符串直接取名,而不用调用它的class类全路径,不然日志打印时会不知道是从哪个类中打印出来,当然日志打印格式定的很规范可以忽略。
比如
private static final Logger logger = LoggerFactory.getLogger(Demo.class);
改为
private static final Logger logger = LoggerFactory.getLogger("demo");
二、 在maven项目中直接打包就混淆步骤
1. pom配置加上:
放在 <build><plugins>下
2. 在 项目根目录下放上proguard混淆配置 proguard.conf
已解决过部分坑的配置例子如下:
3. 不断测试,将不能混淆的类或方法 加入到 proguard.conf 里
一、
1. 由spring管理的java类尽量使用注解,而且注解一定要指定bean id名或引用的bean id名。
比如:
@Service("demoWorker") // 不能是 @Service public class DemoWorker extends BaseWorker{ @Resource(name = "cacheService") // 不能是 @Autowired 或 @Resource private CacheService cacheService; @Resource(name = "demoConfig") private DemoConfig demoConfig; @PostConstruct public void init() { } public void doSome(){ } }
这样被混淆后变为如下,这样spring中对应的bean id没变
@Service("demoWorker") public class a extends b{ @Resource(name = "cacheService") private c d; @Resource(name = "demoConfig") private f d; @PostConstruct public void k() { } public void g(){ } }
当然用了注解要在spring xml配置中加上对注解类的扫描。
如
<context:component-scan base-package="cn.test.xxxx" use-default-filters="false"> <!-- 扫描符合@Service @Repository的类 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/> <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/> </context:component-scan>
2. 对外暴露的接口类的方法名以及相关参数类不能混淆,但这个接口的实现类可以混淆(当然这个实现类的接口方法不会变化,但类名、属性名可以混淆变化)
3. 被反射引用的类(包括模版引用)需要注意,可以对被引用的部分方法、属性不进行混淆,其他也都混淆。
4. 日志打印的Logger名建议用字符串直接取名,而不用调用它的class类全路径,不然日志打印时会不知道是从哪个类中打印出来,当然日志打印格式定的很规范可以忽略。
比如
private static final Logger logger = LoggerFactory.getLogger(Demo.class);
改为
private static final Logger logger = LoggerFactory.getLogger("demo");
二、 在maven项目中直接打包就混淆步骤
1. pom配置加上:
放在 <build><plugins>下
<!-- ProGuard混淆插件--> <plugin> <groupId>com.github.wvengen</groupId> <artifactId>proguard-maven-plugin</artifactId> <version>2.0.11</version> <executions> <execution> <phase>package</phase> <goals> <goal>proguard</goal> </goals> </execution> </executions> <configuration> <!-- 为 true则不混淆,false为混淆 --> <skip>false</skip> <libs> <lib>${java.home}/lib/rt.jar</lib> </libs> </configuration> </plugin>
2. 在 项目根目录下放上proguard混淆配置 proguard.conf
已解决过部分坑的配置例子如下:
-dontshrink -keeppackagenames # 解决 spring找不到能够匹配的Service实例问题 -keepdirectories -optimizations !code/allocation/variable # 不优化 -dontoptimize # 混淆的变量唯一 #-useuniqueclassmembernames #保留 异常 反射 泛型 注解 等 -keepattributes Exceptions, InnerClasses, Signature, Deprecated, SourceFile, LineNumberTable, *Annotation*, Synthetic, EnclosingMethod -keepparameternames # 跳过org.w3c.dom.Node这个误报 -dontwarn org.w3c.dom.Node # 保留Serializable序列化的类不被混淆 -keepclassmembers class * extends java.io.Serializable { static final long serialVersionUID; private static final java.io.ObjectStreamField[] serialPersistentFields; private void writeObject(java.io.ObjectOutputStream); private void readObject(java.io.ObjectInputStream); java.lang.Object writeReplace(); java.lang.Object readResolve(); } -keep class cn.testxxx.* { <fields>; <methods>; } -keep class cn.testxddd { <methods>; }
3. 不断测试,将不能混淆的类或方法 加入到 proguard.conf 里
相关文章推荐
- idea 搭建 springMVC+mybatis+maven 项目(三)mybatis-generater自动生成MyBatis代码
- 写代码累了放松娱乐一下,在大型生产型企业成功实施工作审批流程项目的经验分享
- 写代码累了放松娱乐一下,在大型生产型企业成功实施工作审批流程项目的经验分享
- maven springboot工程 jar包使用ProGuard 混淆代码
- 写代码累了放松娱乐一下,在大型生产型企业成功实施工作审批流程项目的经验分享
- springmvc+mongodb+maven 项目测试代码
- 实现maven管理的Javaweb项目的proguard代码混淆功能
- [置顶] 最全面的springBoot集成mybatis+mysql项目搭建经验分享
- 使用Allatori对Spring Boot项目进行代码混淆
- springboot+maven快速构建项目的示例代码
- SpringBoot创建maven多模块项目实战代码
- spring 项目如何做代码混淆或者加密
- C#代码反编译 得到项目可运行源码 经验分享(附:批量修改文件名工具)
- C#代码反编译 得到项目可运行源码 经验分享(附:批量修改文件名工具)
- C#代码反编译 得到项目可运行源码 经验分享(附:批量修改文件名工具)
- springmvc+mongodb+maven 项目测试代码
- C#代码反编译 得到项目可运行源码 经验分享(附:批量修改文件名工具)--摘抄
- SpringBoot+Maven项目实战(3):整合Freemark模板
- Maven整合Spring,Spring mvc4.1.6,Hibernate4.3.10项目搭建总结
- maven新建Spring MVC + MyBatis + Oracle的Web项目中pom.xml文件