使用ClassFinal对SpringBoot项目加密
ClassFinal有两中方式对项目进行加密。
- Maven plugin方式,由于使用plugin加密时,本人打包时会报错,暂时未解决```java Caused by: compile error: no such class: net.roseboy.classfinal.JarDecryptor at javassist.compiler.MemberResolver.searchImports(MemberResolver.java:479) at javassist.compiler.MemberResolver.lookupClass(MemberResolver.java:422) at javassist.compiler.MemberResolver.lookupClassByJvmName(MemberResolver.java:329) at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:711) at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170) at javassist.compiler.ast.CallExpr.accept(CallExpr.java:49) at javassist.compiler.TypeChecker.atCallExpr(TypeChecker.java:693) at javassist.compiler.JvstTypeChecker.atCallExpr(JvstTypeChecker.java:170) at javassist.compiler.ast.CallExpr.accept(CallExpr.java:49) at javassist.compiler.TypeChecker.atVariableAssign(TypeChecker.java:274) at javassist.compiler.TypeChecker.atAssignExpr(TypeChecker.java:243) at javassist.compiler.ast.AssignExpr.accept(AssignExpr.java:43) at javassist.compiler.CodeGen.doTypeCheck(CodeGen.java:266) at javassist.compiler.CodeGen.atStmnt(CodeGen.java:360) at javassist.compiler.ast.Stmnt.accept(Stmnt.java:53) at javassist.compiler.Javac.compileStmnt(Javac.java:578) at javassist.CtBehavior.insertAt(CtBehavior.java:1224) … 30 more ```
手动加密
过程- 下载ClassFinal的jar包(classfinal-fatjar.jar)
- 对演示项目执行打包命令,将classfinal-fatjar.jar(加密jar包), springboot-usage.jar(演示项目jar包)置于同一目录,且路径中不含中文
然后执行加密命令
java -jar classfinal-fatjar.jar -file usage.jar -packages privs.nb.demo.api -exclude privs.nb.demo.SpringbootUsageApplication -pwd 123456 -Y
执行成功后获得 springboot-usage-encrypted.jar
此时项目已加密完成,使用解压缩工具打开jar后, 可以看到配置的需要加密的package下的相关类的所有实现方法均已消失,除此之位的其他都保持不变
使用命令启动加密后的jar
java -javaagent:springboot-usage-encrypted.jar='-pwd 123456' -jar springboot-usage-encrypted.jar
可以正常启动
可以尝试访问加密相关的接口
可以正常访问