java - 登录后添加 header 拦截器 - Retrofit

标签 java android kotlin retrofit retrofit2

我几天来遇到一个问题,我知道如何设置 header 拦截器,问题是,如何仅在登录后设置 header 拦截器,因为我的流程是:

无需身份验证只需用户名和密码即可登录

然后服务器返回承载 token

如何自动设置 header 身份验证,而不是在每次调用改造时手动添加?有什么办法吗? 我必须使用相同的 Retrofit 实例吗?

最佳答案

您可以通过制作自定义拦截器来做到这一点,下面是代码

 class AuthorizationInterceptor(var context: Context) : Interceptor {

     override fun intercept(chain: Interceptor.Chain): Response {
        var request: Request = chain.request()
        val sessionId = "Your Session Id"

        if (tempSessionId != null) {
            request = request.newBuilder()
                .addHeader("Authorization", "Bearer $tempSessionId").build()
        }
       return chain.proceed(request)
     }
}

然后通过以下方式添加这个拦截器

class RetrofitInstance(var context: Context) {

    private val BASE_URL = APIVersionConstants.BASE_URL


    private val builder = Retrofit.Builder()
        .baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .client(makeOkHttpClient()) 


    private fun makeOkHttpClient(): OkHttpClient {
        return OkHttpClient.Builder()
            .addInterceptor(AuthorizationInterceptor(context)) //<----HERE
            .build()
    }

    private val retrofit = builder.build()

    fun <T> buildService(serviceType: Class<T>): T {
        return retrofit.create(serviceType)
    }


}

已经完成了

关于java - 登录后添加 header 拦截器 - Retrofit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60698260/

相关文章:

android - 根据手机选择文本

android - 单击通知时检查 Activity 是否在屏幕上?(使用 Intent)

java - Struts2 i18n 消息

java - 如何检查 MongoDB 中是否存在字段?

android - 带有 fragment 的 SearchView

android - ConstraintLayout - 与自身成比例的宽度/高度?

从文件中读取字符串时,Kotlin 字符串替换不起作用

json - 如果没有第一个 DeserializationStrategy 参数,Kotlin 的 Json.decodeFromString 是如何工作的?

java - 如何在java中跟踪android上的http数据包

java - 如何在不在 JEXL 中创建该类的实例的情况下调用 java 类的静态方法?