java - android端生成token报错bad token

查看:80
本文介绍了java - android端生成token报错bad token的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

public class UploadToken  {
    public static  String getUploadToken(Object object){
        Gson gson=new Gson();
        String jsonObject=gson.toJson(object);
        String encodedPutPolicy = UrlSafeBase64.encodeToString(jsonObject);
        String encodedSign="";
        try {
            encodedSign =hmacSha1(encodedPutPolicy);
        }catch (Exception e){

        }
        String uploadToken = QiNiuConstant.ACCESSKEY + ":" + encodedSign + ":" + encodedPutPolicy;
        return uploadToken;
    }
    public  static   String hmacSha1(final String base)
            throws NoSuchAlgorithmException, InvalidKeyException {
        String type = "HmacSHA1";
        SecretKeySpec secret = new SecretKeySpec(QiNiuConstant.SECRETKEY.getBytes(), type);
        Mac mac = Mac.getInstance(type);
        mac.init(secret);
        byte[] digest = mac.doFinal(base.getBytes());
        return Base64.encodeToString(digest, Base64.URL_SAFE);
    }

其中Object的为:

public class ImagePutPolicy implements Serializable {
    private String scope;
    private long deadline;
    private ReturnBody returnBody;
    public ImagePutPolicy(String fileName) {
        scope = QiNiuConstant.SAVESPACE+":"+fileName;
    }

    public long getDeadline() {
        return deadline;
    }

    public void setDeadline(long deadline) {
        this.deadline = System.currentTimeMillis()/1000+deadline;
    }

    public ReturnBody getReturnBody() {
        return returnBody;
    }

    public void setReturnBody(ReturnBody returnBody) {
        this.returnBody = returnBody;
    }
}

上传代码为

  private void simpleUpload() {
        ImagePutPolicy putPolicy=new ImagePutPolicy(key);
        putPolicy.setDeadline(3600);
        token=UploadToken.getUploadToken(putPolicy);
        byte[] data=new byte[]{ 0, 1, 2, 3};
        
        uploadManager.put(data, key, token,new UpCompletionHandler() {
            @Override
            public void complete(String key, ResponseInfo info, JSONObject response) {
                //  res 包含hash、key等信息,具体字段取决于上传策略的设置。
                Log.i("qiniu", key + ",\r\n " + info + ",\r\n " + response);
            }
        }, new UploadOptions(null, "test-type", true, null, null));

    }

解决方案

token不是后台生成过来的么

-----------------------------------7-29编辑-------------------------------------------------

这应该是七牛上传,所以需要安卓端生成token。如果是七牛上传,代码如下:

public String getToken() {
        try {
            JSONObject _json = new JSONObject();
            long _dataline = System.currentTimeMillis() / 1000 + 3600;
            _json.put("deadline", _dataline);// 有效时间为一个小时
            _json.put("scope", "images");
            String _encodedPutPolicy = UrlSafeBase64.encodeToString(_json
                    .toString().getBytes());
            byte[] _sign = HmacSHA1Encrypt(_encodedPutPolicy, SecretKey);
            String _encodedSign = UrlSafeBase64.encodeToString(_sign);
            String _uploadToken = AccessKey + ':' + _encodedSign + ':'
                    + _encodedPutPolicy;
            return _uploadToken;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
    
    

 /**
     * 
     * 使用 HMAC-SHA1 签名方法对对encryptText进行签名
     * 
     * @param encryptText
     *            被签名的字符串
     * @param encryptKey
     *            密钥
     * @return
     * @throws Exception
     */
    public static byte[] HmacSHA1Encrypt(String encryptText, String encryptKey)
            throws Exception {
        byte[] data = encryptKey.getBytes(ENCODING);
        // 根据给定的字节数组构造一个密钥,第二参数指定一个密钥算法的名称
        SecretKey secretKey = new SecretKeySpec(data, MAC_NAME);
        // 生成一个指定 Mac 算法 的 Mac 对象
        Mac mac = Mac.getInstance(MAC_NAME);
        // 用给定密钥初始化 Mac 对象
        mac.init(secretKey);
        byte[] text = encryptText.getBytes(ENCODING);
        // 完成 Mac 操作
        return mac.doFinal(text);
    }

希望对你有帮助,以上

这篇关于java - android端生成token报错bad token的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆