我有一个项目是另一个项目的一部分。我正在使用 maven 构建过程来制作项目的jar。我使用 ProGuard 对其进行模糊处理。我有一些处理UI请求的控制器。
问。我的问题是没有混淆的jar正在工作。所有控制器都受到了攻击,但混淆的jar无效(没有控制器被击中)。什么是混淆问题?
我的Servlet.XML:
<context:component-scan base-package="myPackage.controllers" />
<mvc:annotation-driven />
示例控制器代码:
package myPackage.controllers.information;
import myPackage.beans.InfoBean;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@RestController
@RequestMapping("/information")
public class InformationController {
@RequestMapping(method = RequestMethod.GET)
public return_bean getAllInformation() {
//some logic
}
@RequestMapping(value = "/{infoId}", method = RequestMethod.PUT)
public return_bean updateInformation(@PathVariable String InfoId, @RequestBody InfoBean info) {
// some logic
}
}
我的POM.XML内容与ProGuard相关:
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.13</version>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>5.2.1</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<maxMemory>576m</maxMemory>
<obfuscate>true</obfuscate>
<!-- File with proguard configuration -->
<proguardInclude>${basedir}/proguard.conf</proguardInclude>
<libs>
<lib>${java7home}/jre/lib/rt.jar</lib>
<lib>${java7home}/jre/lib/jce.jar</lib>
</libs>
</configuration>
</plugin>
我的ProGuard.conf文件内容:
-dontnot
-dontwarn
-dontshrink
-dontoptimize
-keep public class * { public protected *;}
-keep class myPackage.controllers.** { public protected *;}
-keepattributes SourceFile,Signature,LineNumberTable,Exceptions, *Annotation*
-keepparameternames
-printmapping '${logFilesPath}/${project.artifactId}.log'
我检查了我的混淆jar,所有注释都是持久的。 另外在我的信息包中,我还有一些其他类只有包级访问权限。所以那些也被混淆了。但是我所有拥有RequestMappings的类都是公开的,没有被混淆。
我的运行环境:
1)Java 1.7用于我的项目。但是这个jar放在了运行在Java 1.8上的项目中
2)ProGuard版本:5.2.1
3)春天:4.0.9
4)杰克逊:1.9.11
(注意:未经抽搐的jar正在运行但是混淆不适用于上述环境)
答案 0 :(得分:4)
我需要在ProGuard.conf文件中添加以下内容
seconds
默认情况下,在混淆过程中会删除目录条目。这样做是为了减小罐子的大小。由于我使用Spring的“组件扫描”功能(可能需要目录结构),我需要让它保持正常工作。