我正在尝试通过 SAML 登录 Flutter 应用程序,这需要在 https 端点加载Webview,然后执行一些重定向。
在开发此应用程序时,我需要访问本地 https 端点以启动该进程,该进程由自签名证书支持。我也有一个自签名的 CA 证书。
我已将 CA 证书添加到我用来测试的 Android 模拟器(Android Studio 的默认模拟器)中,它出现在 Trusted Credentials 下的“User”选项卡下。但是,当我将 Webview 设置为导航到我的本地 https 端点时,它会显示一个白屏。
我通过运行MITM 代理,在 mitm.it 上安装他们的证书(它也作为“用户”证书安装),并将 Webview 导航到http://google.com 来进一步测试。我可以观察流量并看到它返回重定向到https://google.com,但 Webview 永远不会加载该页面,而是再次显示白页。我相信这是因为它不信任 mitm 的用户证书。
我看到了两种可能的解决方法:
我正在尝试处理具有嵌套列表深2级的对象。例如,我的对象可以分解为以下形式:
TopLevel: [
MidLevel: [
LowLevel,
LowLevel,
.
.
],
MidLevel: [
LowLevel,
LowLevel,
.
.
]
.
.
]
Run Code Online (Sandbox Code Playgroud)
本质上TopLevel包含一个MidLevel对象列表,而每个对象又包含一个LowLevel对象列表。在处理结束时,我想SomeObj为每个LowLevel对象构建一个。然而SomeObj,需要从信息TopLevel,MidLevel和LowLevel。
在过去的几个月中,我一直在尝试以更具功能性的风格编写代码,因此我的第一个想法是创建一个可以在对象的每个级别上构建的更高阶函数。该函数如下所示:
Function<MidLevel, Function<LowLevel, SomeObj>> buildObjects(TopLevel topLevel) {
return midLevel ->
lowLevel -> {
return buildSomeObj(topLevel, midLevel, lowLevel);
};
}
Run Code Online (Sandbox Code Playgroud)
我打算以类似以下方式的方式使用此功能(假设我有提供列表流的实用程序功能):
Function<MidLevel, Function<LowLevel, SomeObj>> topBuilder = buildObjects(topLevel);
List<SomeObj> objs = topLevel.streamMid()
.map(topBuilder)
.streamLow()
.map(Function::apply)
.collect(/*collect to list*/);
Run Code Online (Sandbox Code Playgroud)
但是,这显然不起作用,因为一旦将MidLevel对象应用于topBuilder函数后,我的流现在是函数流,而不是 …