您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > Java Web 代码混淆方案 2
JavaWeb代码混淆方案1.目的为保护公司程序,防止核心代码外泄,增加项目被反编译的难度,对发布程序进行混淆处理,特制定此方案。本方案以功率预测工程(SPPP-*)为例基于proguard-maven-plugin插件进行混淆。2.插件说明2.1.proguard-maven-pluginproguard-maven-plugin是代码混淆工具Proguard对应的maven插件,对jar包进行混淆处理。配置如下:plugingroupIdcom.github.wvengen/groupIdartifactIdproguard-maven-plugin/artifactIdversion2.0.14/versionexecutionsexecutionidproguard/idphasepackage/phasegoalsgoalproguard/goal/goals/execution/executionsconfigurationobfuscatetrue/obfuscate!--打包好的jar--injarSPPP-shade.jar/injar!--混淆后的jar--outjarSPPP-shade-pg.jar/outjarlibslib${java.home}/lib/rt.jar/lib/libsinjarNotExistsSkiptrue/injarNotExistsSkipoptionsoption-adaptresourcefilecontents**.properties,META-INF/MANIFEST.MF,META-INF/spring.*/optionoption-keepattributesExceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod/optionoption-keepclassmembersenum*{publicstatic**[]values();publicstatic**valueOf(Java.lang.String);}/option!--JDK目标版本1.7--option-target1.7/option!--不做收缩(删除注释、未被引用代码)--option-dontshrink/option!--不做优化(变更代码实现逻辑)--option-dontoptimize/option!--不路过非公用类文件及成员--option-dontskipnonpubliclibraryclasses/optionoption-dontskipnonpubliclibraryclassmembers/option!--不混淆方法参数名--option-keepparameternames/option!--优化时允许访问并修改有修饰符的类和类的成员--option-allowaccessmodification/option!--确定统一的混淆类的成员名称来增加混淆--option-useuniqueclassmembernames/option!--不混淆所有包名,本人测试混淆后WEB项目问题实在太多,毕竟Spring配置中有大量固定写法的包名--option-keeppackagenames/option!--解决Spring自动装配失败问题--option-keepdirectories/option!--不混淆dao包下的所有类名,且类中方法也不混淆--option-keepclasscom.sprixin.sppp.**.dao.**{*;}/option!--不混淆service包下的所有类名--!--option-keepclasscom.sprixin.sppp.**.service.**/option--!--不混淆model包下的所有类以及类的属性及方法--option-keepclasscom.sprixin.sppp.**.model.**{*;}/option!--不混淆vo包下的所有类以及类的属性及方法--option-keepclasscom.sprixin.sppp.**.vo.**{*;}/option!--不混淆Avg15mUtil工具类以及类的属性及方法--option-keepclasscom.sprixin.sppp.cpfs.utils.Avg15mUtil{*;}/option!--不混淆commong包datasource多数据源配置--option-keepclasscom.sprixin.sppp.common.datasource.**{*;}/option!--不混淆分页对象--option-keepclasscom.sprixin.sppp.common.utils.PageInfo{*;}/option!--不混淆自定义Bean命名策略(已配置到spring配置文件中)--option-keepclasscom.sprixin.sppp.common.utils.SpppAnnotationBeanNameGenerator{*;}/option!--不混淆日志切面类(已配置到spring配置文件中)--option-keepclasscom.sprixin.sppp.common.log.LogManager{*;}/option!--实现Serializable不混淆--option-keepclass*implementsjava.io.Serializable{*;}/option!--不混淆shiro包下的类及其成员和方法--option-keepclasscom.sprixin.sppp.auth.shiro.**{*;}/option!--不混淆Controller包下的类名及其方法名--option-keepclasscom.sprixin.sppp.**controller.**{<methods>;}/option/options/configuration/plugin3.不混淆项说明DAO类DAO类和MyBatis的Mapper映射文件中的配置(如:namespace、id)相关联。如果混淆DAO类中的代码,Mapper中的配置将失效。model类model与DAO的原因大致相同,也是因为Mapper映射文件中的配置与model相关联。VO类VO类是转成JSON与前端进行交互的,如果混淆了,那么前端js与后台对应不上。在spring的配置文件中配置的类spring配置文件中对Bean进行了声明、属性注入,混淆代码后会造成spring无法装载Bean。shiro、springmvc配置文件中声明的自定义类Controller的方法参数前端的请求param对应Controller方法得参数名称。AOP设置的切入点方法(如:声明式事务配置的方法名规则)AOP在工程中使用方法名前缀进行匹配,混淆方法名称将造成AOP的失效。web.xml中配置的自定义Servlet、Filter4.过程说明合并jar包;合并后的jar包混淆处理;用混淆jar包替换war包中个未混淆jar包;4.1.合并jar包把各个模块的jar包解压到一个目录下(提示覆盖时确认即可),注意依赖顺序,运行jarcvfSPPP-shade-pg.jar*进行打包,生成的jar包待用。4.2.maven构建混淆模块在parent项目上创建obfuscate模块。SPPP-common.jar......SPPP-cpfs.jarSPPP-obfuscate-pg.jarSPPP-web.war....SPPP-common.jarSPPP-cpfs.jarSPPP-obfuscate-pg.jarSpring-core.jar....4.3.配置pom.xml文件(具体配置请根据自己项目灵活修改)projectxmlns=:xsi=:schemaLocation=://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.sprixin.sppp/groupIdartifactIdSPPP-parent/artifactIdversion0.0.1-SNAPSHOT/version/parentartifactIdSPPP-obfuscate/artifactIddependencies!--依赖common工程--dependencygroupIdcom.sprixin.sppp/groupIdartifactIdSPPP-common/artifactIdversion${project.version}/version/dependency!--依赖auth工程--dependencygroupIdcom.sprixin.sppp/groupIdartifactIdSPPP-auth/artifactIdversion${project.version}/version/dependency!--依赖utils工程--dependencygroupIdcom.sprixin.sppp/groupIdartifactIdSPPP-utils/artifactIdversion${project.version}/version/dependency!--风电光伏通用模块--dependencygroupIdcom.sprixin.sppp/groupIdartifactIdSPPP-cpfs/artifactIdversion${project.version}/version/dependency/dependenciesbuildpluginsplugingroupIdcom.github.wvengen/groupIdartifactIdproguard-maven-plugin/artifactIdversion2.0.14/versionexecutionsexecutionidproguard/idphasepackage/phasegoalsgoalproguard/goal/goals/execution/executionsconfigurationobfuscatetrue/obfuscate!--打包好的jar--injarSPPP-shade.jar/injar!--混淆后的jar--outjarSPPP-shade-pg.jar/outjarlibslib${java.home}/lib/rt.jar/lib
本文标题:Java Web 代码混淆方案 2
链接地址:https://www.777doc.com/doc-3142235 .html