安卓前端依赖JWT解析token出现的Base64编解码问题

后台是通过JWT创建、解析token的,登陆接口给前端返回token后前端需要解析其中payload段的参数。

在这里插入图片描述

前端采用这段代码解析的时候编译没问题,运行时出现异常:
在这里插入图片描述

查阅博客之后发现是Android的FrameWork层和JWT之间jar包冲突,详情见博客:
Android中使用commons-codec-1.6.jar 进行Base64编解码出现的问题
https://www.cnblogs.com/jooy/p/9146527.html

上文中提供了解决方案,但好像比较复杂,由于我们前端只是用来解析token第二段payload中的属性,本质就是对字符串Base64解码再按照UTF-8重新编码,干脆手写一个解析方法给前端用,不用JWT的封装了。

Java 8的java.util套件中,新增了Base64的类别,可以用来处理Base64的编码与解码
(这应该不会冲突了吧?)

import java.io.UnsupportedEncodingException;
import java.util.Base64;
public class ParseTokenUtil {
//     使用示例:
//    Long userId = parseToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OTI4Mjk5MTYsInVzZXJJZCI6MTN9.Qx7_BrfaISKR7XYoStmQCU4JKa13tqLz5VJ_oZ_Tvtk"
//                      ,"userId",Long.class);
    public static <T> T parseToken(String token, String key, Class<T> clazz) {
        //将token分成三部分
        String[] split = token.split("\\.");
        //第二部分是payload
        String params = split[1];
        Base64.Decoder decoder = Base64.getDecoder();
        String string = "";
        try {
            string = new String(decoder.decode(params), "UTF-8");
            JSONObject jsonObject = JSON.parseObject(string);
            T object = jsonObject.getObject(key, clazz);
            return object;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }
}

卧槽还真的不行

在这里插入图片描述
在stackoverflow上找到答案:
在这里插入图片描述
在这里插入图片描述
修改安卓项目中该工具类的导包和decode方法调用:

import java.io.UnsupportedEncodingException;
import android.util.Base64;
public class ParseTokenUtil {
//     使用示例:
//    Long userId = parseToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1OTI4Mjk5MTYsInVzZXJJZCI6MTN9.Qx7_BrfaISKR7XYoStmQCU4JKa13tqLz5VJ_oZ_Tvtk"
//                      ,"userId",Long.class);
    public static <T> T parseToken(String token, String key, Class<T> clazz) {
        //将token分成三部分
        String[] split = token.split("\\.");
        //第二部分是payload
        String params = split[1];
        String string = "";
        try {
            string = new String(Base64.decode(params,Base64.DEFAULT), "UTF-8");
            JSONObject jsonObject = JSON.parseObject(string);
            T object = jsonObject.getObject(key, clazz);
            return object;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }
}

完美解决!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值