论坛首页 Java企业应用论坛

给你的应用加入简易Licence限制

浏览 17473 次
精华帖 (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
   发表时间:2009-06-01  
没有看出来怎么做的licence限制。

用户数限制仅仅是一个基于数量限制的licence方案实例,还有其它例如基于产品数的,这里也没有给出方案。就贴子本身,若超过用户数就启动失败,若用户就是不重启系统呢(掉电除外)?

还有基于(组件)功能的licence,基于安装数,基于使用时间等等,贴子没有任何讨论。

此外licence限制也和spring无关吧。

投一个新手贴。
0 请登录后投票
   发表时间:2009-06-01  
只是投石问路的基本思路和方法,可以基于这个方法进行深入的开发.当然,你也可以在配置文件当中删除这个片段.这样的话就没有限制了.
0 请登录后投票
   发表时间:2009-06-01  
开发人员能删,若用户也删除这段配置呢。
我明白你的意思,只是若太过简易了就不好讨论啦。
0 请登录后投票
   发表时间:2009-06-01  
这种操作,如果有点懂软件的人,都会把配置文件的相关配置代码删了。照样可以跑系统。
0 请登录后投票
   发表时间:2009-06-01  
看来我这招,专治菜鸟.大家有更好的意见没得.
0 请登录后投票
   发表时间:2009-06-01  
感觉现在绝大部分,都是ca证书认证或者时间限制。我是很感兴趣如何限制用户数
0 请登录后投票
   发表时间:2009-06-01  
这个只能防君子。。。。。

要是我直接编译一个CLASS覆盖
0 请登录后投票
   发表时间:2009-06-01  
地球上有专门做这个的厂家,如safeNet  or  wibu
0 请登录后投票
   发表时间: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比较难反编译。但是我们没有这样做,只是简单的混淆了一下。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics