【发布时间】:2018-02-03 14:58:00
【问题描述】:
有没有办法在 Android WebView 中拦截重定向请求? shouldInterceptRequest(WebView,WebResourceRequest) 似乎没有被调用!
我想通过以下方式自动捕获所有 Web 视图请求中的令牌过期:
- 从服务器发出重定向而不是 401
- 在需要登录时使用 shouldOverrideUrlLoading() 调用 AppAuth
- 在不需要登录的情况下,使用 shouldInterceptRequest 通过刷新令牌返回到原始 URL
第 2 项工作正常,但第 3 项失败得惊人,因为似乎没有调用 shouldInterceptRequest 来进行重定向,这似乎确实是错误的——特别是因为这没有记录在案并且 WebResourceRequest API 会让人相信甚至可以检查请求是否为重定向。
我很乐意响应 401,而不是使用重定向 - 但我认为没有办法使用更新的令牌“原地”重试请求,除非该请求恰好是顶级页面请求。
我想我可以尝试旧的“页内”重定向而不是 302,看看效果是否更好,但即使这样做真的也是一种黑客攻击。
(请注意,这显然是与Android WebView, how to handle redirects in app instead of opening a browser 不同的问题——因为我已经有一个 web 视图并且正在尝试拦截和操作重定向请求。)
【问题讨论】:
-
嘿!也许它可以帮助你stackoverflow.com/questions/4066438/…
-
不,我需要让现有的 Web 视图处理请求的结果,包括非顶级请求,例如对于
标签等。不过,如果我需要重新设计请求。看来这根本不是 WebViewClient 的可行方法。
-
@JessHolle 你有什么解决方案吗,如果你能分享一下,真的很有帮助。
标签: android redirect webview webviewclient