В моем приложении у меня есть WebView, который размещен на сервере. И у меня есть метод overidden shouldInterceptRequest (), потому что я должен добавить заголовок Authourization с маркером Bearer к каждому запросу:
override fun shouldInterceptRequest(view: WebView?, request: WebResourceRequest?):WebResourceResponse?{
request?.let {
if(it.url.toString().trim().startsWith("https://someproxy.qwe.com")) {
val url = request.url.toString()
return getNewResponse(url,it.method)
}
}
return null
}
private fun getNewResponse(url: String,method: String): WebResourceResponse? {
//some skipped code for
val request = Request.Builder()
.url(url.trim { it <= ' ' })
.addHeader("Authorization",token)
.method(method,null)
.build()
response = httpClient.newCall(request).execute()
val webResourceResponse = WebResourceResponse(
null,
response?.header("content-encoding", "utf-8"),
response?.body()?.byteStream()
)
return webResourceResponse
}
Мой HttpClient имеет "custom responseInterceptor", который проверяет все ответы на наличие ошибки "TOKEN_EXPIRED" и, если получентакая ошибка повторяет тот же запрос с обновленным токеном.
При просмотре журналов добавляются заголовки, я получаю правильный ответ от сервера и отправляю его обратно в WebView.
НО , веб-представление после получения ответа, возвращенного функцией shouldInpterceptRequest (), сообщает: «заблокировано политикой CORS : ответ на запрос предполетной проверки не прошелпроверка контроля доступа: на запрашиваемом ресурсе отсутствует заголовок ' Access-Control-Allow-Origin '. "
Когда я пытаюсь загрузить URL-адрес из папки android / assets, все работает какcharm, проблема возникает при перехвате запросов webView, чьи html и js размещены на сервере.
NO, проблема не на стороне сервера, потому что при выполнении запроса из браузера Chrome, после добавления заголовка вручнуюСерверы правильно реагируют. Я действительно застрял, любая помощь будет оценена ...!