-
[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를 사용해서 넣지 않아도 일괄적으로 같은 데이터를 넣을 수 있고,
코드를 조금 더 손보면 원하는 내용을 변경하거나, 다른 동작들도 가능하다!
'Android📱' 카테고리의 다른 글
Compose 상태관리 Stateful...? (0) 2022.10.25 DI란 무엇인가.... feat. Hilt, Koin (2) 2022.10.19 [Compose] hiltViewModel을 써서 composable끼리 viewModel을 공유해보자! (4) 2022.09.20 [Android] Retrofit2으로 서버에 Multipart로 이미지 전송하기 (0) 2022.08.13 ktlint를 사용해보자! (0) 2022.07.28