[안드로이드] InterCeptor

이상욱·2023년 5월 30일
0

안드로이드

목록 보기
16/17
post-thumbnail

JWT 토큰을 Interceptor를 통해 전달하기

위 처럼 Retrofit의 Header를 사용하면 JWT토큰을 헤더로 보낼 수 있지만 매 API 마다 작성해야 하므로 번거로움이 있습니다. 이를 개선하기 위해 InterCeptor를 통해 request시 jwt를 전달할 수 있습니다.

Interceptor란

Interceptor는 해당 네트워크 통신을 하는 중간에 요청과 응답을 보내거나 받거나 간섭하는 역할을 수행합니다.

Interceptor 클래스를 만들어서 저장해둔 JWT를 가져와서 request의 addHeader를 사용해 JWT 토큰을 헤더에 넣어줍니다.

class XAccessTokenInterceptor : Interceptor {

    override fun intercept(chain: Interceptor.Chain): Response {
		//JWT 가져오기
        var token = TOKEN

        val request = chain.request()
            .newBuilder()
            .addHeader("JWT", "$token")
            .build()
        val response = chain.proceed(request)

        return response
    }
}

이 인터셉터를 OkHttpClient에 추가해주고 Retrofit에 client로 등록해줍니다

 	@Provides
    @Singleton
    fun provideOkHttpClient(
        xAccessTokenInterceptor: XAccessTokenInterceptor
    ): OkHttpClient {
        return OkHttpClient.Builder()
            .addNetworkInterceptor(xAccessTokenInterceptor)
            .build()
    }
    
    @Provides
    @Singleton
    fun provideRetrofitInstance(gson: Gson, client: OkHttpClient): Retrofit {
        return Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .client(client)
            .build()
    }

이제 Interceptor로 API에 일일이 Header에 JWT를 넣어 줄 필요 없이 Interceptor를 통해 JWT를 전달할 수 있습니다.

profile
항상 배우고 성장하는 안드로이드 개발자

0개의 댓글