통신할때 Auth인증하는 방법중에 쿠키에 (헤더에) 인증값을 넣어 통신하는 방법
로그인또는 회원가입했을때 Response Header에
set-cookie
해당 키값을 찾아 value 를 저장해놓고 ( SharedPreferences )
Auth가 필요한 통신을 할때 저장된 value를 Request Header에 넣어 통신하는 방법
Retrofit Interceptor 첨부
internal class AuthInterceptor @Inject constructor(
private val sessionProvider: SessionProvider
) : Interceptor {
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
val response = this.doRequest(chain)
if (response.code == HttpURLConnection.HTTP_UNAUTHORIZED) {
sessionProvider.logout()
return response
}
//value 값중 필요한 값만 가져오기
response.headers(HEADER_RESPONSE_COOKIE).takeIf { it.isNotEmpty() }?.let { cookies ->
val sid = cookies.first().substringBefore(";").substringAfter("=")
sessionProvider.updateAccessToken(sid)
}
return response
}
@Throws(IOException::class)
private fun doRequest(chain: Interceptor.Chain): Response {
val request = chain.request()
val cookieSid = sessionProvider.cookieSid
if (cookieSid != null) {
return chain.proceed(
request
.newBuilder()
.addHeader(HEADER_REQUEST_COOKIE, "$SID_PREFIX$cookieSid")
.build()
)
}
return chain.proceed(request)
}
companion object {
private const val HEADER_RESPONSE_COOKIE = "set-cookie"
private const val HEADER_REQUEST_COOKIE = "Cookie"
private const val SID_PREFIX = "xxx.sid=" // 서버 설정에 따라 다를 수 있음
}
}
'Android' 카테고리의 다른 글
"좋아요" 동기화 (로컬 싱크 맞추기, Rx 이용) (0) | 2022.03.14 |
---|---|
액티비티간, fragment간 값 전달 하기 (ViewModel X) (0) | 2022.02.12 |
음성 파일 서버 업로드하기 (0) | 2022.01.10 |
DiffUtil 사용시 정렬후 스크롤 Top 으로 이동하기 (0) | 2021.12.29 |
시간 간격 계산하여 x분전, x시간 전으로 변형하기 (0) | 2021.12.24 |