因此,原生移动应用程序(Android和iOS)的标准SSO方法似乎是通过AppAuth库的OAUth2 + OpenID Connect.
这一切都很好 - 实际上似乎接近优雅.
但是,如果同一个应用程序包含需要使用相同SSO访问资源的嵌入式Web视图组件(在与所有资源需要身份验证访问的本机代码相同的Web应用程序中的同一服务器上),该怎么办?
对于初学者来说,OAuth2访问令牌(一旦获得)不会自动传播到Web应用程序中的超链接请求,对吧?那么,网页应用程序页面本身是否必须使用JavaScript进行重做以进行此类传播?移动应用程序可以重写请求来解决此问题,但是:
OAuth2不是正确的方法吗?如果是这样,那似乎是一种耻辱 - 因为AppAuth似乎对本机应用程序方面非常好.它只是将基本的Web视图浏览混合到真正混乱的图片中.
或者只有一些事实上的标准JavaScript库可以与Angular等混合使用(然后需要使用Angular等)?
通常当使用Java 8的parallelStream()时,结果是通过默认的公共fork-join池(即ForkJoinPool.commonPool())执行.
然而,如果一个人的工作远离CPU限制,例如可能在很多时候都在等待IO,那么这显然是不可取的.在这种情况下,人们会想要使用一个单独的池,根据其他标准确定大小(例如,任务可能实际使用CPU的时间有多少).
有没有明显得到parallelStream()使用不同池的方式,但作为一个详细的方式在这里.
不幸的是,这种方法需要从fork-join池线程调用并行流上的终端操作.这样做的缺点是,如果目标分支连接池完全忙于现有工作,整个执行将等待它,而什么都不做.因此,池可能成为比单线程执行更糟糕的瓶颈.相反,当以"正常"方式使用parallelStream()时,使用ForkJoinPool.common.externalHelpComplete()或ForkJoinPool.common.tryExternalUnpush()来让池外的调用线程帮助处理.
有谁知道的方式既获得parallelStream()使用非默认的fork-join池,并有从的fork-join池帮助外的调用线程在这项工作中的处理(但fork-不休息加入游泳池的工作)?
有什么方法可以拦截Android WebView中的重定向请求?shouldInterceptRequest(WebView,WebResourceRequest)似乎没有被调用!
我想通过以下方式自动捕获所有Web视图请求中的令牌到期:
第2项工作正常,但第3项却失败了,因为似乎没有调用shouldInterceptRequest进行重定向,这确实是错误的-尤其是因为这没有记录,并且WebResourceRequest API会使人相信,甚至可以检查是否请求是重定向。
我会很乐意响应401而不是使用重定向-但我看不到有使用更新的令牌“就地”重试该请求的方法,除非该请求恰好是顶级页面请求。
我想我可以尝试老“页面”重定向,而不是302的,看看是否能工作的更好,但即使它是真正的黑客攻击。
(请注意,这显然不同于Android WebView,它是如何在应用程序中处理重定向而不是打开浏览器的问题 -因为我已经拥有一个Webview,并且正在尝试拦截和操纵重定向请求。)
看起来android.database.Cursor.getColumnIndex(String)
在行循环上应该是不变的。
但我看到大量代码在执行以下操作:
try (Cursor cursor = database.query(...)) {
while (cursor.moveToNext()) {
String aString = cursor.getString(cursor.getColumnIndex(aColumnName));
// ... other loop code and more repeated use of getColumnIndex()
}
}
Run Code Online (Sandbox Code Playgroud)
这看起来很愚蠢而且浪费,除非 的结果getColumnIndex()
确实会随着对cursor.moveToNext()
-- 的调用而变化,并且这个调用应该被提升到循环之外,如下所示:
try (Cursor cursor = database.query(...)) {
int aStringIdx = cursor.getColumnIndex(aColumnName);
while (cursor.moveToNext()) {
String aString = cursor.getString(aStringIdx);
// ... other loop code
}
}
Run Code Online (Sandbox Code Playgroud)
或者在最坏的情况下(假设getColumnIndex()
要求您位于有效的数据行上):
try (Cursor cursor = database.query(...)) {
if (cursor.moveToFirst()) {
int aStringIdx = cursor.getColumnIndex(aColumnName);
do {
String …
Run Code Online (Sandbox Code Playgroud)