先阅读一下http://proguard.sourceforge.net/manual/troubleshooting.html#unexpectedclass,内容如下:

Warning: class file ... unexpectedly contains class ...
The given class file contains a definition for the given class, but the directory name of the file doesn't correspond to the package name of the class. ProGuard will accept the class definition, but the current implementation will not write out the processed version. Please make sure your input classes are packaged correctly. Notably, class files that are in the WEB-INF/classes directory in a war should be packaged in a jar and put in the WEB-INF/lib directory. If you don't mind these classes not being written to the output, you can specify the-ignorewarnings option, or even the-dontwarn option.

war项目中java编译后放在WEB-INF/classes中,如果我们对其proguard,就不断地报Warning: class file ... unexpectedly contains class ...,然后混淆失败。上面这段话说得很明白,目前proguard的版本不支持对WEB-INF/classes里面的*.class进行混淆,而WEB-INF/classes中的正是我们要进行保护,避免反编译的内容。我上网查了一下,大致都在说如果进行proguard配置来对war进行混淆。I am amazing,各路大神是怎么做到的,真的能混淆需要保护的内容吗?

这段文字给给出了一个很重要的建议,即将WEB-INF/classes其打包成jar,放置在WEB-INF/lib中。由此,我们可以对我们编写的代码进行混淆。

step 1:打成jar

选择项目,可以直接在src/main/java中点击右键,export为jar包,例如a.jar。这个jar包实际上就是我们希望混淆的内容,那么为何不直接对其进行混淆。

step2:混淆jar

如果采用annotation而非在web.xml中定义servelet,我们就无需保留servelet的名字(已经相关的package名字),对Fliter也是同理。下面是proguard的配置。

在Input/Output中引入所有涉及的jar包,包括javax的servlet。

step3:封装war

我们将经过混淆后的a-proguard.jar放在WEB-INF/lib/中,同时删除classes/,如果用maven,还需要删除test-classes/。在Eclipse的项目中F5进行更新,然后右键export为war,这样即可。

最后,通过解压缩工具,例如7z打开war包进行检查。

proguard的目的是防止反编译,不在乎强求是否直接将war还是jar进行混淆。通过上面的步骤可以有效地对我们编写的代码进行混淆,目的达到。

相关链接:开发日志

【Developer Log】ProGuard扰码web项目(WAR)相关推荐

  1. java 扰码工具_【Developer Log】ProGuard扰码可执行JAR包

    在项目上线之前需要通过ProGuard来对java的class进行混淆,以避免反编译方式,来保护自己的代码.ProGuard网上有很多资料,可以参考:http://blog.csdn.net/zhan ...

  2. idea 导出war包,IDEA导出Web项目war包并放入Tomcat运行起来

    ### 目录 ### * * * 1.打开Web项目的项目结构 * 2.找到构件然后添加一个新的构件 * 3.添加完成后如图所示,留意下输出目录 * 4.之后关闭项目结构选择构建-编译Artifact ...

  3. java war包混淆_使用proguard混淆java web项目代码

    -injars 'Y:\src.jar' #需要混淆的jar -outjars 'Y:\java\src.jar' #输出jar -libraryjars 'C:\java\jre6\lib\rt.j ...

  4. java源代码加密+使用proguard混淆java web项目代码+自定义Classloader

    如何保护我们的源代码,实际上,应该有几种方法可以使用:1.使用代码混淆器 2.重载应用服务器的classloader 使用代码混淆器proguard进行代码混淆 1.首先下载proGuard.zip到 ...

  5. 使用proguard混淆java web项目代码

    1.首先下载proGuard.zip到本地: proguard4.5beta4.tar.zip解压开, 2.新建文本文档,修改文件名为XXX.pro,然后复制下面内容到.pro -injars 'Y: ...

  6. web服务器获取项目路径问题,读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题...

    1.需求:有时候我们产品经理给我们的需求是会不断变化的,例如数量是1000现在变成500,我们不可以去改代码吧,这样很麻烦,所以就可以改配置文件properties(这个数据库链接一样),当然也有js ...

  7. 《Linux下使用Docker部署Web项目》

    ​说在前头:本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,能力有限,文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...

  8. java项目打成jar和war_maven打包web项目时同时打包为war和jar文件的方法

    本文介绍了maven打包web项目时同时打包为war和jar文件的方法,分享给大家,具体如下: 首先在pom.xml文件中指定war的打包方式,war test test war 上述代码在eclip ...

  9. Java web项目如何在服务器上跑起来(有源码)

    Java web项目如何在服务器上跑起来(有源码) 要用到的工具有:myeclipse.宝塔,navicat premium.xshell. 概述:本博文主要是帮助入门级新手怎么从网上下载一个java ...

最新文章

  1. 12层也能媲美ResNet?YOLOv4一作邓嘉团队提出ParNet:非深度网络!
  2. KEGG功能注释工具 KofamKOALA 安装与使用
  3. 传统企业应用转型--从0到1的微服务之路
  4. 微软850位顶级人才不做Windows研发
  5. 多视图几何总结——摄像机模型
  6. linux ranger 文本模式,Ranger – 给命令行用户一个基于文本的文件管理器
  7. C语言实现queue队列的算法(附完整源码)
  8. matlab波形振幅,MATLAB正交振幅调制解调仿真分析(一)
  9. sshpass远程执行脚本_终端-Linux命令之非交互SSH密码验证-Sshpass
  10. 【数据结构笔记17】集合的表示、双亲表示法、并查集、集合的并运算
  11. 自动驾驶 2-1 第 1 课补充阅读:传感器和计算硬件 -- 下
  12. CSRF和SSRF漏洞
  13. PHP安卓获取gpgga,对于GPS模块数据接收和提取的问题分析
  14. c语言从入门到放弃(初识)
  15. C语言实现的获取文件夹内文件名
  16. 马化腾是该全面反思腾讯战略了:吃老本不能让腾讯变得伟大!
  17. php直接拨号代码,c#自动ADSL拨号代码
  18. linux中进程unit是什么意思,linux-日常运维- unit介绍
  19. java 新浪短链接_如何通过Java调用新浪短网址官方API接口实现短网址缩短功能
  20. [KDL库学习]KDL库安装与使用

热门文章

  1. figma的一些用法(一)
  2. Unity3d--GUI自适应矩阵(通过Matrix4x4.SetTRS)
  3. MyBatis12 结果集映射
  4. python setup_python--setUp()和tearDown()应用
  5. 大众疑问:学会PS 可以找什么工作
  6. 修改Docker默认安装路径
  7. VS_设置护眼背景色
  8. Hutool做excel的解析
  9. 【渝粤题库】陕西师范大学111118 商法学 作业
  10. Python电影观众数量回归分析 随机森林 可视化 实验报告