有的时候,客户会提出这样的需求,他们的应用能不能当产品一样的出售呀,如果能够保证每一个买家有一个唯一的限制的话,这将是一个不错的想法.
为了能够达到这个目的,我就想了一个很弱智的实现方案.就是在应用启动时加入一些参数,并做一个检验,如果检验失败后就启动失败,这样的话,这个应用就不能正常使用.
好了.就按照这个思路来做一个实现,然后再做扩展.因为我们使用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