Proguard在SpringBoot中的使用方法

在项目发布时,有时为了保护代码,防止他人反编译,发布者会对代码采取一定的保护措施。保护代码的措施有很多种,而且安全性也不一样。本文以SpringBoot项目为例,主要介绍的是在项目在发布时使用Proguard工具对代码进行混淆,增加代码的阅读难度。

1.在pom.xml文件中添加Proguard插件配置


            com.github.wvengen
            proguard-maven-plugin
            2.0.11
            
                
                    
                    package
                    
                        
                        proguard
                    
                
            
            
                配置内容下面介绍
            
            
                
                    net.sf.proguard
                    proguard-base
                    6.2.2
                
            
         

2.对Proguard进行配置

在进行配置之前,对哪些类进行混淆,哪些类不进行混淆需要搞清楚。在SpringBoot项目中,容易混淆出问题的有以下几个方面:
(1)dao代码混淆
一般dao会有对应的mapper文件,如果对dao进行混淆,mapper中指向的dao会找不到,报错。
可不进行混淆:


(2)Spring中bean重名的问题
spring容器中,默认会将类名首字母小写后作为bean的名称。混淆代码之后,不同包下的类可能被命名成相同的类,这样就会出现bean重复。
解决方法:可以改变bean名称的生成策略,可以加上包名来生成bean的名称。修改main的方法,如下:

public class Application {
       public static class CustomGenerator implements BeanNameGenerator {
            @Override
            public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
                return definition.getBeanClassName();
            }
        }
     
        public static void main(String[] args) {
            SpringApplicationBuilder sab=new SpringApplicationBuilder(Application.class)
                    .beanNameGenerator(new CustomGenerator());
            ApplicationContext ac =sab.run(args);
            //Arrays.stream(ac.getBeanDefinitionNames()).forEach(System.out::println);
        }
}

(3)controller方法参数名不能修改
因为controller是和前端交互的地方,controller方法的参数名不能改变,否则前台传参会有问题。


(4)自定义注解不能混淆
(5)实体类不能混淆
实体类混淆之后,可能会出现mabatis别名冲突


上述是代码混淆配置的常见问题,整个配置可参考下面的配置:


                
                true
                
                
                true
                
                pg
                
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                    
                     
                    
                    
                    
                    
                    
                    
                    
                    
                    

                    
                    
                    
                    
                    
                    
                    
                    
                    
                
                
                    ${java.home}/lib/rt.jar
                
                
                domain/**
                
                classes
                ${project.build.finalName}-pg.jar
                
                ${project.build.directory}
            

你可能感兴趣的:(Proguard在SpringBoot中的使用方法)