java - 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);
}
}
解决方案
您没有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);
}
}
推荐阅读
- command-line - 无法在命令行上使用 zsh 作为 shell 传递 Python 列表
- excel - 加载到表时,如何让 Excel 保留电源查询中的数据类型?
- javascript - 如何在 JavaScript 测验中包含图像?
- pyqt5 - QGraphicsPixmapItem 没有正确旋转
- linux - 无法理解错误:mov rax, qword [rbp-24 - rbx * 8] 上的有效地址无效
- python - 改进搜索回文的脚本
- oracle - Oracle - 将插入/更新/删除/执行授予公共角色是一种糟糕的安全做法吗?
- arrays - 链表与数组:物理内存中哪个更连续?
- ruby - Eclipse 的动态语言工具包是否支持 Ruby 关键字参数?
- django - 将模型实例从一个模型复制到另一个模型