Android WebView:拦截重定向请求?

Jes*_*lle 6 redirect android webview webviewclient

有什么方法可以拦截Android WebView中的重定向请求?shouldInterceptRequest(WebView,WebResourceRequest)似乎没有被调用!

我想通过以下方式自动捕获所有Web视图请求中的令牌到期:

  1. 从服务器发出重定向而不是401
  2. 在需要登录的地方使用shouldOverrideUrlLoading()调用AppAuth
  3. 在无需登录的情况下,使用shouldInterceptRequest通过刷新的令牌弹回原始URL

第2项工作正常,但第3项却失败了,因为似乎没有调用shouldInterceptRequest进行重定向,这确实是错误的-尤其是因为这没有记录,并且WebResourceRequest API会使人相信,甚至可以检查是否请求是重定向。

我会很乐意响应401而不是使用重定向-但我看不到有使用更新的令牌“就地”重试该请求的方法,除非该请求恰好是顶级页面请求。

我想我可以尝试老“页面”重定向,而不是302的,看看是否能工作的更好,但即使它是真正的黑客攻击。

(请注意,这显然不同于Android WebView,它是如何在应用程序中处理重定向而不是打开浏览器的问题 -因为我已经拥有一个Webview,并且正在尝试拦截和操纵重定向请求。)

com*_*m1x 0

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)
    }
}
Run Code Online (Sandbox Code Playgroud)