使用jocky混淆java项目

1、什么是混淆?为什么要混淆?这个问题不多说明,简单讲,就是为了保护软件项目的所有权,防止别人反编译,将代码打乱,人看着会很费劲,但对计算机执行没有障碍。
2、当前项目的结构:项目采用的框架是ssh(spring、struts2、hibernate)的,其中还用了Annotation 注释标签。代码形如:
(1)一个bo的代码

/**
*@preserve all
*/
@Entity
@Table(name = "crm_code_clientSort")
public class ClientSort
{
@Id
@GeneratedValue(generator = "uuidGenerator")
@GenericGenerator(name = "uuidGenerator", strategy = "uuid")
@Column(length = 32)
private String id;//标识

@Column(length = 6)
private String code; //编号

@Column(length = 20)
private String name; //名称

}

(2)action的代码

/**
*@preserve all
*/
@Controller
@Scope("prototype")
@ParentPackage(value = "abc-default")
@Namespace("/crm/backlog")
@Results(
{
@Result(name = "showInfo", location = "/jsp/crm/backlog/showInfo.jsp"),
@Result(name = "common", location = "/jsp/crm/backlog/list.jsp"),
@Result(name = "addBacklog", location = "/jsp/crm/backlog/addBacklog.jsp"),
@Result(name = "updateBacklog", location = "/jsp/crm/backlog/updateBacklog.jsp")

})
@InterceptorRef("isLogin")
public class BacklogAction {

@Resource
private CRM_BacklogService cRM_backlogService; //此对象是spring自动注入的,因为加了@Resource标签

@Resource
private CodeBean codeBean;

private Object fere;
private Backlog dto;
//以下略

}

(3)service代码

@Service
public class UserService
{
@Resource
public Dao dao;

public String getTheNum()
{
//省略代码
return "";
}


/**
* @preserve public
*/
public void updateObject(User user)
{
dao.updateObject(user);
}

//********省略其他
}


3、混淆介绍。
(1)整体混淆级别设置。设置为public的。对所有的代码混淆。具体配置文件我使用方法,参见jocky的说明文件,附件的压缩包中有。

<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开头的方法,才能改变数据库,否则会报错。参见如下:

<!-- 配置事务的传播特性 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>


<!-- 那些类的哪些方法参与事务 -->
<aop:config>
<aop:pointcut id="commonServiceMethod" expression="execution(* com.abc.domain.common.service.*.*(..))" />
<aop:pointcut id="khServiceMethod" expression="execution(* com.abc.domain.*.*.inside.service.*.*(..))" />

<aop:advisor pointcut-ref="commonServiceMethod" advice-ref="txAdvice" />
<aop:advisor pointcut-ref="khServiceMethod" advice-ref="txAdvice" />
</aop:config>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值