首页 > 解决方案 > Encode Jwt 中的结果登录

问题描述

我很困惑如何做到这一点,我设法登录到我的 Android 登录。但是我想带一个 ID 成员来使用 CRUD,我将结果保存到 SharedPreferences。我想获取用户名字段并创建一个数据成员。此外,如果我将结果访问权限保存在 SharedPreffernces 中,我该怎么办?当我尝试创建时,使用 Header 完成数据成员并将其放入 Retrofit 2 中,结果是 Token Null 对象首选项

{
    "status": 200,
    "reason": "OK",
    "success": true,
    "message": null,
    "result": "eyJ0eXAiOiJKV1QiLCJhbGciOiJITUFDLVNIQTI1NiJ9.eyJpZCI6IjEiLCJlbWFpbCI6ImFkbWluaXN0cmF0b3JAZ21haWwuY29tIiwibXNpc2RuIjoiMTAwMDAiLCJ1c2VybmFtZSI6ImFkbWluaXN0cmF0b3IiLCJ2ZXJpZmllZE1lbWJlciI6bnVsbCwicHJvZmlsZSI6eyJpZCI6IjE1MCIsImlkX2dlb2RpcmVjdG9yeSI6bnVsbCwiZnVsbG5hbWUiOiJhZ2VudDEyMyIsIm51bWJlciI6IjU1ODU5OSIsImltYWdlIjoiaHR0cHM6XC9cL2RldmVsb3BtZW50LmtyZWRpdGltcGlhbi5pZFwvaW1hZ2VzXC9kZWZhdWx0XC9hdmF0YXIuanBnIiwicmVjb3JkIjp7InN0YXR1cyI6IlBVQkxJU0giLCJjcmVhdGUiOnsidXNlciI6bnVsbCwidGltZXN0YW1wIjp7ImRhdGUiOiIyMDE5LTEwLTIxIDE5OjA0OjMxLjAwMDAwMCIsInRpbWV6b25lX3R5cGUiOjMsInRpbWV6b25lIjoiQXNpYVwvSmFrYXJ0YSJ9fSwidXBkYXRlIjp7InVzZXIiOm51bGwsInRpbWVzdGFtcCI6bnVsbH19LCJtZXRhZGF0YSI6eyJ1c2VybmFtZSI6ImFnZW50MTIzIiwiZW1haWwiOiJhZ2VudDEyM0BnbWFpLmNvbSIsInBob25lIjoiMDM0ODM0NzQyMzQ5MjM4OSJ9LCJzdGF0aXN0aWMiOm51bGx9fQ.TEfYrLgKxPMmE4uqlnNcuEelWA4wxZHw6D5B1aM5xkU"
}

RetrofitClient.java

private static OkHttpClient client = new OkHttpClient();
private static Retrofit retrofit = null;

public static Retrofit getClient(String baseUrl){
    TokenAuthenticator interceptor = new TokenAuthenticator();
    OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(interceptor)
            .build();

    if (retrofit == null){
        retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build();
    }
   return retrofit;
}

TokenAuthenticator.java

public class TokenAuthenticator implements Interceptor {

    SharedPrefManager sharedPrefManager;


    @Override
    public Response intercept(Chain chain) throws IOException {

        Request originalRequest = chain.request();

        Request newRequest = originalRequest.newBuilder()
                .header("Authorization ", sharedPrefManager.getSPToken())
                .build();

        return chain.proceed(newRequest);

    }
}

标签: javaandroid

解决方案


您没有sharedPrefManager在 TokenAuthenticator 中初始化,因此您必须对其进行初始化。

所以你必须像下面这样更新你的课程。

RetrofitClient.java

private static OkHttpClient client = new OkHttpClient();
private static Retrofit retrofit = null;

public static Retrofit getClient(Context context,String baseUrl){
    TokenAuthenticator interceptor = new TokenAuthenticator(context);
    OkHttpClient client = new OkHttpClient.Builder()
            .addInterceptor(interceptor)
            .build();

    if (retrofit == null){
        retrofit = new Retrofit.Builder()
                .baseUrl(baseUrl)
                .addConverterFactory(GsonConverterFactory.create())
                .client(client)
                .build();
    }
   return retrofit;
}

TokenAuthenticator.java

public class TokenAuthenticator implements Interceptor {

    SharedPrefManager sharedPrefManager;
   public TokenAuthenticator(Context context){
    sharedPrefManager=new SharedPrefManager(context);
   }

    @Override
    public Response intercept(Chain chain) throws IOException {

        Request originalRequest = chain.request();

        Request newRequest = originalRequest.newBuilder()
                .header("Authorization ", sharedPrefManager.getSPToken())
                .build();

        return chain.proceed(newRequest);

    }
}

推荐阅读