如何让你的应用软件有试用日期的限制

来源:互联网 发布:spring高级编程 pdf 编辑:程序博客网 时间:2024/05/18 02:48

        很多成型的应用软件都有试用版和正式版之分,试用版一般都有功能上的限制,同时也有使用次数或使用期限的限制。要使试用版成为正式版,有些软件是要求你拿注册码注册,还有一些软件是通过授权文件来区分试用版和正式版,从试用版变成正式版,只是把授权文件换一下而已。一般来说,桌面软件会采用注册码的方式较多,而服务器端软件采用授权文件的较多,授权文件一般会将要限制的信息,比如并发数、最后日期等明文、密文一块保存。

        本人在做项目过程中采用了一种变通的解决方式,让我的应用有了使用日期的限制:

1、将要限制的日期采用MD5加密,连同明文的日期一起放在一个配置文件里

2、在程序中加一个过滤器,读取这个配置文件,通过对读取到的明文重新进行加密,和从配置文件里读取到的密文进行比较

3、如果两者不一致,表明授权文件遭到篡改,不再继续提供服务

4、如果两者一致,继续比较从配置文件里读取的限制日期和当前日期,如果当前日期晚于限制日期,表明使用期限已到,不再继续提供服务

5、否则继续提供服务

        相关代码如下:

加密类

public class SecurityUtil {//采用这个类将明文加密/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString expiration = "2012-10-09";String signature = "";try{signature = SecurityUtil.doMessageDigest(expiration);}catch(Exception e){e.printStackTrace();}System.out.println("expiration:" + expiration + "\nsignature:" + signature);//产生的密文和明文一起存入配置文件}public static String doMessageDigest(String arg) throws Exception{//要生成摘要的明文byte[] b=arg.getBytes("UTF8");  //生成摘要MessageDigest md=MessageDigest.getInstance("MD5");md.update(b);byte[]s=md.digest();   //显示生成的摘要String res="";for(int i=0;i<s.length;i++){//将字节数组转换成字符串res=res+Integer.toHexString((0x000000ff&s[i])|0xffffff00).substring(6);}return res;}}

过滤器类

public class SecurityFilter extends HttpServlet implements Filter {/** *  */private static final long serialVersionUID = 920198400163140364L;private FilterConfig filterConfig;private Logger logger = Logger.getLogger(getClass());public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain filterChain) throws IOException, ServletException {// TODO Auto-generated method stubNewCarBrandConfig config = new NewCarBrandConfig();String expiration = config.getExpiration();String signature = config.getSignature();String target = "";try{target = SecurityUtil.doMessageDigest(expiration);}catch(Exception e){e.printStackTrace();}if(!signature.equals(target)){logger.warn("不合法的授权文件!");return;}else{Date today = new Date();Date targetDay;try {targetDay = ToolUtil.getDateFromString(expiration,"yyyy-MM-dd");if(today.after(targetDay)){logger.warn("授权文件已过期!");return;}} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}filterChain.doFilter(arg0, arg1);}public void init(FilterConfig arg0) throws ServletException {// TODO Auto-generated method stubthis.filterConfig = arg0;}}

配置文件

expiration=2012-10-09signature=fd23826ef02908bf7404839a32ae44b4

说明:这只是一个变通的解决办法,因为当授权文件不合法或者授权文件过期时,并没有停止程序运行,只是通过让过滤器强制返回,使用户在访问系统时只得到一个空页面,程序还在后台运行,但用户不能使用。

原创粉丝点击