`
kane_xie
  • 浏览: 145014 次
社区版块
存档分类
最新评论

Proguard混淆代码导致Spring自动装配失败

阅读更多

最近尝试用Proguard来混淆代码,以增加发布出去的代码安全性。今天运行混淆后的jar包发生如下异常

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: public abc.service.Service test.rest.controller.Controller.service; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [abc.service.Service] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
... 26 more

 

程序很简单,接口

 

public interface Service {
	int getAge();
}

 实现类使用@Component标签实例化到spring容器中

 

 

@Component
public class ServiceImpl implements Service{
	public int getAge() {
		return new Random().nextInt(100);
	}
}

 在Controller中使用@Autowired标签自动装配

 

 

@Autowired
public Service service;

 

 

原程序可以正常运行,但在混淆了代码之后,发生以上所述的异常,原因是spring找不到能够匹配的Service实例。

 

忙活了一整天各种测试各种查资料,终于找到解决方案,很简单

 

1.在proguard配置中加上“-keepdirectories”

2.保证proguard版本不低于4.4

 

另外附上解决前和解决后的jar包解压时候的控制台输出

 

1.这是没加“-keepdirectories”的输出

inflated: META-INF/MANIFEST.MF
inflated: abc/service/Service.class
inflated: test/rest/controller/Controller.class
inflated: test/rest/controller/ServiceImpl.class
inflated: META-INF/maven/test/rest/pom.xml
inflated: META-INF/maven/test/rest/pom.properties

 

2.加上“-keepdirectories”之后解压

created: META-INF/
inflated: META-INF/MANIFEST.MF
created: abc/
created: abc/service/
created: test/
created: test/rest/
created: test/rest/controller/
inflated: abc/service/Service.class
inflated: test/rest/controller/Controller.class
inflated: test/rest/controller/ServiceImpl.class
created: META-INF/maven/
created: META-INF/maven/test/
created: META-INF/maven/test/rest/
inflated: META-INF/maven/test/rest/pom.xml
inflated: META-INF/maven/test/rest/pom.properties

 

 

3
2
分享到:
评论

相关推荐

    Proguard混淆Web项目(Spring+Struts2+Mybatis)

    "Proguard混淆Web项目(Spring+Struts2+Mybatis)"是一个针对这类需求的实践案例,它利用了Proguard这一强大的代码混淆、优化和压缩工具。下面我们将深入探讨Proguard的相关知识点及其在Web项目中的应用。 Proguard...

    SpringBoot + proguard+maven多模块实现代码混淆

    基于SpringBoot+Maven多模块工程利用proguard组件实现代码混淆的代码demo,代码清晰完整,导入idea或eclipse即可运行。 使用 proguard 混淆代码只能增加阅读和理解的难度, 并不能百分百保证代码安全。常用的应用...

    springboot工程(单个maven工程)利用proguard实现代码混淆

    对于Spring Boot这样的复杂框架,你需要特别注意避免混淆那些会影响Spring自动装配和依赖注入的类。此外,混淆也可能导致日志、调试信息和异常跟踪的困难,因此在生产环境启用混淆的同时,记得保留必要的调试信息。 ...

    通过proguard5.2.1代码混淆工具和简单说明

    本实例使用的是把web项目中的源码(src)所有文件打包成jar文件,使用proguard混淆后再把jar文件以及jar解压后的混淆class类文件替换原war项目的相应位置即可。 混淆过程中需要使用keep参数来保持原有一些属性、注解...

    proguard混淆打包工具

    proguard混淆打包工具proguard混淆打包工具proguard混淆打包工具

    修改Proguard混淆规则,自定义字符集

    在Android应用开发中,为了保护代码安全和优化应用性能,我们常常会使用Proguard工具进行代码混淆、优化和压缩。本文将深入探讨如何修改Proguard混淆规则,以及如何自定义字符集,以满足特定需求。 Proguard是...

    一步步教你使用Proguard混淆Java源代码 .docx

    * 需要添加所有的支持库,否则可能导致混淆失败。 * 需要保留所有的公共类和方法,否则可能导致代码不可用。 * 需要根据需要设置混淆选项,例如 Shrinking、Obfuscation、Optimization 等。 * 需要保存配置文件,并...

    解决proguard混淆报错-Proguard5.1

    proguard混淆jar包提示错误:Unknown verification type [*] in stack map frame 解决方案:找到proguard源码中proguard\src\proguard\classfile\ClassConstants.java类,然后修改ATTR_StackMapTable的值,将原来的...

    springboot工程(单个maven工程)利用proguard实现代码混淆 java demo案例

    本案例是一个Spring Boot单个Maven工程,通过ProGuard实现代码混淆的实践示例。首先,我们需要了解ProGuard的基本配置和使用方法。ProGuard的配置文件通常命名为`proguard.cfg`,在该文件中,我们可以定义混淆规则,...

    proguard混淆步骤操作流程

    ProGuard是一款强大的Java字节码处理工具,常用于Android应用的代码混淆、优化、压缩和预校验。在开发过程中,为了保护代码安全,避免反编译,开发者通常会使用ProGuard进行混淆,使得源代码变得难以理解。下面将...

    实现maven管理的Javaweb项目的proguard代码混淆功能

    3. 执行构建:运行`mvn package`命令,Maven会自动调用ProGuard并将混淆后的结果打包进最终的jar或war文件。 在实际操作中,可能会遇到一些问题,如类找不到、配置文件错误等。解决这些问题的关键在于正确配置...

    使用Proguard混淆Java源代码

    java代码很容易被反编译,可通过混淆技术来保护源码,此处我们应用开源项目proguard来进行混淆。操作使用详见:http://blog.csdn.net/odian1/article/details/8282799

    Java防编译技术---proguard混淆器

    Java防编译技术是开发过程中保护源代码安全性和技术保密性的重要手段,而ProGuard混淆器正是其中的关键工具。ProGuard是一款开源的Java字节码混淆、优化、压缩和预校验工具,它能帮助开发者有效地减少应用的体积,...

    idfc-proguard混淆优化demo1

    【标题】"idfc-proguard混淆优化demo1"是一个示例项目,主要展示了如何使用Proguard工具对Android或Java应用进行代码混淆和性能优化。在Android开发中,Proguard是常用的代码混淆工具,它能够缩小APK大小,保护源...

    ant proguard 混淆编译 之Eclipse-Idea

    在Android开发中,为了保护应用的安全性和优化代码,开发者通常会使用ProGuard工具进行混淆编译。本篇文章将聚焦于如何在Eclipse和IntelliJ IDEA(Idea)这两个不同的集成开发环境中配置并使用ProGuard,以实现对Ant...

    proguard程序混淆器

    ProGuard可以方便地与构建工具如Ant、Maven、Gradle集成,自动化混淆、优化和打包流程。在Android Studio中,ProGuard配置通常在`build.gradle`文件中完成,通过`minifyEnabled true`开启混淆,并指定配置文件路径...

    J2EE-web工程ProGuard代码混淆

    【J2EE-web工程ProGuard代码混淆】是Java开发中的一种安全实践,旨在保护应用程序的源代码不被轻易反编译和理解。ProGuard是一款强大的Java字节码混淆、优化、压缩和预校验工具,它能将Java字节码转换成更难阅读和...

    proguard,代码混淆

    在Android开发中,ProGuard还可以进行预校验,检查混淆后的代码是否符合Dalvik虚拟机的要求,避免因混淆导致的运行时错误。 **6. 使用流程:** 在Android Studio中,ProGuard的集成使得混淆变得简单。只需在build....

    WEB Maven 项目 ProGuard 混淆方案

    WEB Maven 项目 ProGuard 混淆方案 POM文件,包含详细混淆注释 具体请参考博客: http://blog.csdn.net/wltj920/article/details/48970869#comments

Global site tag (gtag.js) - Google Analytics