有没有办法在Android WebView中拦截重定向请求?shouldInterceptRequest(WebView,WebResourceRequest(似乎没有被调用!
我想通过以下方式在所有 Web 视图请求中自动捕获令牌过期:
- 从服务器发出重定向而不是 401
- 使用 shouldOverrideUrlLoad(( 在需要登录的地方调用 AppAuth 使用
- shouldInterceptRequest 使用刷新的令牌反弹回原始 URL,其中不需要登录
第2 项工作正常,但第 3 项失败得非常严重,因为 shouldInterceptRequest 似乎没有被调用进行重定向,这似乎确实是错误的——特别是因为这没有记录在案,并且 WebResourceRequest API 会导致人们相信甚至可以检查请求是否是重定向。
我很乐意响应 401 而不是使用重定向 - 但我认为没有办法使用更新的令牌"原地"重试请求,除非该请求恰好是顶级页面请求。
我想我可以尝试旧的"页面内"重定向而不是 302,看看它是否更好,但即使它这样做了,这真的是一个黑客。
(请注意,这显然是一个与Android WebView不同的问题,如何在应用程序中处理重定向而不是打开浏览器 - 因为我已经有一个Web视图并且正在尝试拦截和操纵重定向请求。
在 Kotlin 上拦截的示例:
webView.webViewClient = object: WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
if (url.startsWith("https://example.com")) {
// ...
return false
}
return super.shouldOverrideUrlLoading(view, url)
}
}