ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] Retrofit2 사용 시 헤더에 데이터 넣기!
    Android📱 2022. 10. 17. 23:30

    안드로이드에서 OAuth 2.0 인증 절차를 진행할 때 

    okhttp 헤더에 토큰을 추가해서 인증을 진행하는 경우가 많이 있다.

     

    나도 프로젝트를 진행하면 보통 서버 측과 JWT를 이용해서 인증을 하고 요청에 대한 응답을 받게 되는 구성으로 프로젝트를 진행하였다.

     

    그때 보통 두 개의 방식이 있는데 

     

    retrofit2 요청 시 @Header 어노테이션 사용하기

    import retrofit2.http.GET
    
    interface ItemApi {
        @GET("/item")
        fun getItemList(
            @Header("accessToken") accessToken: String?,
        ): List<Item>
    }

    가장 기본 적인 방식은 이 방식이다.

    직접 헤더 어노테이션을 써서 토큰을 추가해주는 방식이다.

    만약 헤더마다 다른 데이터를 추가해야 하거나

    양이 많지 않을 때는 간단하게 사용하기 좋은 방식이라고 생각된다.

     

    하지만 토큰은 보통 요청을 할 때 매번 들어가게 되고,

    이 작업을 일일이 다 해주다 보면 실수를 할 확률도 있고, 

    많은 노동이 들게 된다.

     

    그래서 사용하는 방법이

    interceptor이다

     

    interceptor를 이용해서 헤더 추가하기

    
    import com.example.home_rent_app.data.repository.token.TokenRepository
    import com.example.home_rent_app.data.session.AppSession
    import kotlinx.coroutines.Dispatchers
    import okhttp3.Interceptor
    import okhttp3.Request
    import okhttp3.Response
    import okhttp3.Route
    
    class AuthInterceptor : Interceptor, Authenticator {
    
        override fun intercept(chain: Interceptor.Chain): Response {
    
            val requestBuilder = chain.request()
                .newBuilder()
    
            requestBuilder.addHeader(
                 "access-token",
                 it.accessToken.tokenCode
            )
           
            return chain.proceed(requestBuilder.build())
        }
    }

    이 방식은 okhttp3에 Interceptor라는 인터페이스를 구현하고,

    okhttp 클라이언트를 만들 때 추가해주면 자동으로 원하는 내용을 헤더에 추가해주는 방법이다.

     

    Builder를 통해서 okhttp 클라이언트를 만들때

    .addInterceptor(authInterceptor)

    를 이용해서 추가해주면 요청을 보낼 때 자동으로 원하는 내용이 헤더에 추가되게 된다.

    그러면 하나하나 @Header를 사용해서 넣지 않아도 일괄적으로 같은 데이터를 넣을 수 있고,

    코드를 조금 더 손보면 원하는 내용을 변경하거나, 다른 동작들도 가능하다!

     

Designed by Tistory.