public String getSign() {
        Sign sign;
        String signStr;
        if(!signMap.containsKey(uri) 
                || signMap.get(uri).signDate == null 
                || new Date().getTime() - signMap.get(uri).signDate.getTime() > 30 * 60 * 1000
                || !method.equals(signMap.get(uri).method)
                || contentLength != signMap.get(uri).contentLength) {
            sign = new Sign();
            sign.signDate = new Date();
            sign.method = method;
            sign.contentLength = contentLength;
            setGmtDate(DateUtil.getGMTDate(sign.signDate));
            sign.sign = Md5.MD5(method + "&" + uri + "&" + gmtDate + "&" + contentLength + "&" + Md5.MD5(password));
            signMap.put(uri, sign);
            signStr = sign.sign;
        } else {
            sign = signMap.get(uri);
            signStr = sign.sign;
        }
        return signStr;
    }