张慧的博客

张慧的博客

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks
 1、什么是混淆?为什么要混淆?这个问题不多说明,简单讲,就是为了保护软件项目的所有权,防止别人反编译,将代码打乱,人看着会很费劲,但对计算机执行没有障碍。 
    2、当前项目的结构:项目采用的框架是ssh(spring、struts2、hibernate)的,其中还用了Annotation 注释标签。代码形如: 
    (1)一个bo的代码 
Java代码  收藏代码
  1. /** 
  2.  *@preserve all 
  3.  */  
  4. @Entity  
  5. @Table(name = "crm_code_clientSort")  
  6. public class ClientSort  
  7. {  
  8.     @Id  
  9.     @GeneratedValue(generator = "uuidGenerator")  
  10.     @GenericGenerator(name = "uuidGenerator", strategy = "uuid")  
  11.     @Column(length = 32)  
  12.     private String id;//标识  
  13.       
  14.     @Column(length = 6)  
  15.     private String code; //编号  
  16.   
  17.     @Column(length = 20)  
  18.     private String name; //名称  
  19.       
  20. }  

    (2)action的代码 
Java代码  收藏代码
  1. /** 
  2.  *@preserve all 
  3.  */  
  4. @Controller  
  5. @Scope("prototype")  
  6. @ParentPackage(value = "abc-default")  
  7. @Namespace("/crm/backlog")  
  8. @Results(  
  9. {       
  10.     @Result(name = "showInfo", location = "/jsp/crm/backlog/showInfo.jsp"),  
  11.     @Result(name = "common", location = "/jsp/crm/backlog/list.jsp"),  
  12.     @Result(name = "addBacklog", location = "/jsp/crm/backlog/addBacklog.jsp"),  
  13.     @Result(name = "updateBacklog", location = "/jsp/crm/backlog/updateBacklog.jsp")  
  14.       
  15. })  
  16. @InterceptorRef("isLogin")  
  17. public class BacklogAction {  
  18.       
  19.     @Resource  
  20.     private CRM_BacklogService cRM_backlogService; //此对象是spring自动注入的,因为加了@Resource标签  
  21.       
  22.     @Resource  
  23.     private CodeBean codeBean;      
  24.       
  25.     private Object fere;       
  26.     private Backlog dto;   
  27.         //以下略  
  28.   
  29. }  

    (3)service代码 
Java代码  收藏代码
  1. @Service  
  2. public class UserService  
  3. {  
  4.    @Resource  
  5.    public Dao dao;  
  6.   
  7.    public String getTheNum()  
  8.    {  
  9.       //省略代码  
  10.       return "";  
  11.     }  
  12.   
  13.   
  14.    /** 
  15.      * @preserve public 
  16.      */  
  17.    public void updateObject(User user)  
  18.    {  
  19.       dao.updateObject(user);  
  20.    }  
  21.       
  22.    //********省略其他  
  23. }  


    3、混淆介绍。 
    (1)整体混淆级别设置。设置为public的。对所有的代码混淆。具体配置文件我使用方法,参见jocky的说明文件,附件的压缩包中有。 
Xml代码  收藏代码
  1. <property name="jocky.scramble.level" value="public"/>  

    (2)对于不需要混淆的类,加上注释 @preserve all 将其除外。如上面的bo、action代码。本项目中不能混淆的类有: 
    A、action类,可能是由于struts2管理的原因,如果混淆,项目会报错,找不到相应的action. 
    B、bo类,该类是和数据库表一一对应的,改变了,就乱了。因为用的是hibernate自动映射的。 
    C、其他会被jsp页面中引用到的类,如dto类,工具类,dwr类等。 
    (3)对于可以混淆的类,但不能混淆的方法,加上@preserve public 注释。如上面的service类。因为涉及到事务的控制,如果方法名被混淆了,在方法内改变数据的某些操作时,就会报错。本项目中在sping.xml内配置了所有service方法中,只有以save,update,delete开头的方法,才能改变数据库,否则会报错。参见如下: 
Xml代码  收藏代码
  1. <!-- 配置事务的传播特性 -->  
  2. <tx:advice id="txAdvice" transaction-manager="transactionManager">  
  3.     <tx:attributes>  
  4.         <tx:method name="save*" propagation="REQUIRED" />  
  5.         <tx:method name="update*" propagation="REQUIRED" />  
  6.         <tx:method name="delete*" propagation="REQUIRED" />  
  7.         <tx:method name="*" read-only="true" />  
  8.     </tx:attributes>  
  9. </tx:advice>  
  10.   
  11.   
  12. <!-- 那些类的哪些方法参与事务 -->  
  13. <aop:config>  
  14.     <aop:pointcut id="commonServiceMethod" expression="execution(* com.abc.domain.common.service.*.*(..))" />  
  15.     <aop:pointcut id="khServiceMethod" expression="execution(* com.abc.domain.*.*.inside.service.*.*(..))" />  
  16.       
  17.     <aop:advisor pointcut-ref="commonServiceMethod" advice-ref="txAdvice" />  
  18.     <aop:advisor pointcut-ref="khServiceMethod" advice-ref="txAdvice" />  
  19. </aop:config>  

posted on 2012-07-08 01:46 张慧 阅读(3536) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: