锁定老帖子 主题:给你的应用加入简易Licence限制
精华帖 (0) :: 良好帖 (0) :: 新手帖 (12) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-01
最后修改:2009-06-01
有的时候,客户会提出这样的需求,他们的应用能不能当产品一样的出售呀,如果能够保证每一个买家有一个唯一的限制的话,这将是一个不错的想法. 为了能够达到这个目的,我就想了一个很弱智的实现方案.就是在应用启动时加入一些参数,并做一个检验,如果检验失败后就启动失败,这样的话,这个应用就不能正常使用. 好了.就按照这个思路来做一个实现,然后再做扩展.因为我们使用Spring的MVC框架,我就想把它加载到Spring的启动配置文件当中.实现如下,一共有三个个文件,一个JAVA文件,一个是加入到Spring配置文件当中的片段.另外是一个Licence.properites文件. Java文件: public class LicenceManager { private final int MAX_USER = 10; private String username = "";//用户名 private String organization = "";//公司名 private String licence;//生成的md5码 private boolean valid; /** * 当然,如果你有严格的限制的话,你可以加入网卡的唯一码, * 或者更牛B的限制手段! **/ @Resource private UserDAO userDAO; //注入完成之后需要执行的方法上,以执行任何初始化 @PostConstruct public void validate() { String calcLicence = DigestUtils.md5Hex(username + organization); if (calcLicence.equals(licence)) valid = true; } public LicenceManager() { } //当然也可以加入对最多用户的限制 public boolean checkLicence() { if (valid || userDAO.getCountAll() < MAX_USER) return true; return false; } public void setUsername(String username) { this.username = username; } public void setOrganization(String organization) { this.organization = organization; } public void setLicence(String licence) { this.licence = licence; } public boolean isValid() { return valid; } } Spring的配置文件: <bean id="licenceManager" class="com.corticon.dialogs.designer.licence.LicenceManager"> <property name="username" value="${licence.username}"/> <property name="organization" value="${licence.organization}"/> <property name="licence" value="${licence.licence}"/> </bean> <context:property-placeholder location="classpath:Licence.properties" /> 另外Licence.properites示例如下: licence.username=foobar licence.organization=foobar.com licence.licence=401303938298f18f397e6b0125159927 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-01
没有看出来怎么做的licence限制。
用户数限制仅仅是一个基于数量限制的licence方案实例,还有其它例如基于产品数的,这里也没有给出方案。就贴子本身,若超过用户数就启动失败,若用户就是不重启系统呢(掉电除外)? 还有基于(组件)功能的licence,基于安装数,基于使用时间等等,贴子没有任何讨论。 此外licence限制也和spring无关吧。 投一个新手贴。 |
|
返回顶楼 | |
发表时间:2009-06-01
只是投石问路的基本思路和方法,可以基于这个方法进行深入的开发.当然,你也可以在配置文件当中删除这个片段.这样的话就没有限制了.
|
|
返回顶楼 | |
发表时间:2009-06-01
开发人员能删,若用户也删除这段配置呢。
我明白你的意思,只是若太过简易了就不好讨论啦。 |
|
返回顶楼 | |
发表时间:2009-06-01
这种操作,如果有点懂软件的人,都会把配置文件的相关配置代码删了。照样可以跑系统。
|
|
返回顶楼 | |
发表时间:2009-06-01
看来我这招,专治菜鸟.大家有更好的意见没得.
|
|
返回顶楼 | |
发表时间:2009-06-01
感觉现在绝大部分,都是ca证书认证或者时间限制。我是很感兴趣如何限制用户数
|
|
返回顶楼 | |
发表时间:2009-06-01
这个只能防君子。。。。。
要是我直接编译一个CLASS覆盖 |
|
返回顶楼 | |
发表时间:2009-06-01
地球上有专门做这个的厂家,如safeNet or wibu
|
|
返回顶楼 | |
发表时间:2009-06-01
我的license文件格式如下:
<licenses> <license> <product>Product Name</product> <option></option> <version>1.0</version> <notices>Copyright 2005-2007</notices> <licensee>UserName</licensee> <street></street> <city></city> <state></state> <postalCode></postalCode> <country></country> <start>19.07.2007</start> <expiration>19.09.2010</expiration> <usercount>20</usercount> <digest>tRJB36DajfOr0Kesgpo28NnrBCw=</digest> <signature>RszB27jpYrSVJL0VG6FmgYsVpwbEo5xvmFxbyZz6RX1fHUi9Z0JJEagD1Irw==</signature> </license> </licenses> 然后配置一个启动类,读这个文件,如果这个文件没有,或者要读的信息没有就报错。读这个license文件之后,就把信息放在一个静态类里。既然题目是简单解决方案,这样就挺简单的。其实就是防君子不防小人。如果要实现的更好一点就把所有重要类都加密,然后用一个classloader使用dll来解密相应类。这样如果做得好的话,一般class比较难反编译。但是我们没有这样做,只是简单的混淆了一下。 |
|
返回顶楼 | |