張慧的博客

          張慧的博客

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            45 Posts :: 0 Stories :: 24 Comments :: 0 Trackbacks
           1、什么是混淆?為什么要混淆?這個問題不多說明,簡單講,就是為了保護軟件項目的所有權(quán),防止別人反編譯,將代碼打亂,人看著會很費勁,但對計算機執(zhí)行沒有障礙。 
              2、當前項目的結(jié)構(gòu):項目采用的框架是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)整體混淆級別設(shè)置。設(shè)置為public的。對所有的代碼混淆。具體配置文件我使用方法,參見jocky的說明文件,附件的壓縮包中有。 
          Xml代碼  收藏代碼
          1. <property name="jocky.scramble.level" value="public"/>  

              (2)對于不需要混淆的類,加上注釋 @preserve all 將其除外。如上面的bo、action代碼。本項目中不能混淆的類有: 
              A、action類,可能是由于struts2管理的原因,如果混淆,項目會報錯,找不到相應的action. 
              B、bo類,該類是和數(shù)據(jù)庫表一一對應的,改變了,就亂了。因為用的是hibernate自動映射的。 
              C、其他會被jsp頁面中引用到的類,如dto類,工具類,dwr類等。 
              (3)對于可以混淆的類,但不能混淆的方法,加上@preserve public 注釋。如上面的service類。因為涉及到事務的控制,如果方法名被混淆了,在方法內(nèi)改變數(shù)據(jù)的某些操作時,就會報錯。本項目中在sping.xml內(nèi)配置了所有service方法中,只有以save,update,delete開頭的方法,才能改變數(shù)據(jù)庫,否則會報錯。參見如下: 
          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 張慧 閱讀(3550) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 洪洞县| 迁西县| 凤山市| 华池县| 海原县| 忻州市| 翼城县| 贡山| 长兴县| 德保县| 澎湖县| 牡丹江市| 讷河市| 余姚市| 本溪市| 阿鲁科尔沁旗| 瑞昌市| 乐安县| 庄河市| 彰化市| 紫阳县| 涿鹿县| 峨山| 义马市| 建瓯市| 会宁县| 微博| 准格尔旗| 侯马市| 万州区| 牙克石市| 神木县| 通城县| 准格尔旗| 广宁县| 祥云县| 滦平县| 沁水县| 镇江市| 白城市| 高邮市|