社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

android应用连接mysql数据库的登录状态验证

InigoMontoyaJr • 4 年前 • 1000 次点击  

我有来自android 8用户的报告说我的应用程序(使用后端feed)不显示内容。经过调查,我发现Android 8上发生了以下异常:

08-29 12:03:11.246 11285-11285/ E/: [12:03:11.245, main]: Exception: IOException java.io.IOException: Cleartext HTTP traffic to * not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:458)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:127)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.doConnection(AbstractHttpAsyncTask.java:207)
at com.deiw.android.generic.tasks.AbstractHttpAsyncTask.extendedDoInBackground(AbstractHttpAsyncTask.java:102)
at com.deiw.android.generic.tasks.AbstractAsyncTask.doInBackground(AbstractAsyncTask.java:88)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)

(我删除了包名、url和其他可能的标识符)

在android 7和更低版本上一切正常,我没有设置 android:usesCleartextTraffic 在清单中(并将其设置为 true 不起作用,这是默认值),也不使用网络安全信息。如果我打电话 NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted() ,它返回 false 对于Android 8, 对于旧版本,使用相同的apk文件。 我试图在google上找到一些关于android o的信息,但是没有成功。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39940
 
1000 次点击  
文章 [ 16 ]  |  最新文章 4 年前
Mayuresh Deshmukh
Reply   •   1 楼
Mayuresh Deshmukh    4 年前

在我的例子中,url在浏览器中也不起作用。

我查一下 https://www.google.com/

webView.loadUrl("https://www.google.com/")

这对我很有用。

Ripdaman Singh
Reply   •   2 楼
Ripdaman Singh    4 年前

更改API版本9.0后,不允许将错误的明文HTTP通信传输到-api.domain.com(targetsdkversion=“28”)。在xamarin,xamarin.android和android工作室。

在xamarin、xamarin.android和android studio中解决此错误的两个步骤。

步骤1:创建文件资源/xml/network_security_config.xml

在network_security_config.xml中

<?xml version="1.0" encoding="utf-8" ?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">mobapi.3detrack.in</domain>
  </domain-config>
</network-security-config>

步骤2:更新androidmanifest.xml-

在应用程序标记上添加android:network security config=“@xml/network\u security配置”。 例如:

<application android:label="your App Name" android:icon="@drawable/icon" android:networkSecurityConfig="@xml/network_security_config">
Nithinjith
Reply   •   3 楼
Nithinjith    4 年前

我在开发应用程序时也遇到了同样的“不允许明文http流量”错误。我在应用程序中使用reformation2进行网络调用,我有两个项目环境(dev&production)。我的生产域有带有https调用的ssl证书,而dev没有https。配置是在构建风格中添加的。但当我换成dev时,这个问题就会触发。所以我添加了下面的解决方案。

我在清单中添加了明文通信

 android:usesCleartextTraffic="true"

然后我在改装配置类okhttp创建时间中添加了一个连接规范。

 .connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))

下面给出了完整的okhttpclient创建

OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .readTimeout(10, TimeUnit.SECONDS)
        .connectTimeout(10, TimeUnit.SECONDS)
        .cache(null)
        .connectionSpecs(CollectionsKt.listOf(ConnectionSpec.MODERN_TLS, ConnectionSpec.CLEARTEXT))
        .addInterceptor(new NetworkInterceptor(context))
        .addInterceptor(createLoggingInterceptor())
        .addInterceptor(createSessionExpiryInterceptor())
        .addInterceptor(createContextHeaderInterceptor())
        .build();
tripleee
Reply   •   4 楼
tripleee    5 年前

升级至React Native 0.58.5或更高版本。 他们有 includeSubdomain 在RN0.58.5的配置文件中。

ChangeLog

在RN0.58.5中,他们宣布 network_security_config 和他们的服务器域。网络安全配置允许应用程序允许来自特定域的明文通信。所以不需要付出额外的努力 android:usesCleartextTraffic="true" 在清单文件的应用程序标记中。升级rn版本后将自动解决此问题。

Mohsin Khan
Reply   •   5 楼
Mohsin Khan    4 年前

把你的网址从http改成http s;

SushiHangover
Reply   •   6 楼
SushiHangover    4 年前

把这些不同的答案应用到 Xamarin.Android ,您可以使用类和程序集级别的属性,而不是手动编辑 AndroidManifest.xml

当然需要互联网许可(duh..):

[assembly: UsesPermission(Android.Manifest.Permission.Internet)]

注意:通常程序集级属性会添加到 AssemblyInfo.cs 文件,但任何文件,在 using 高于 namespace 作品。

然后在应用程序子类(如果需要,可以创建一个)上添加 NetworkSecurityConfig 指的是 Resources/xml/ZZZZ.xml 文件:

#if DEBUG
[Application(AllowBackup = false, Debuggable = true, NetworkSecurityConfig = "@xml/network_security_config")]
#else
[Application(AllowBackup = true, Debuggable = false, NetworkSecurityConfig = "@xml/network_security_config"))]
#endif
public class App : Application
{
    public App(IntPtr javaReference, Android.Runtime.JniHandleOwnership transfer) : base(javaReference, transfer) { }
    public App() { }

    public override void OnCreate()
    {
        base.OnCreate();
    }
}

在中创建文件 Resources/xml 文件夹(创建 xml 文件夹(如果需要)。

例子 xml/network_security_config 文件,根据需要调整(参见其他答案)

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
          <domain includeSubdomains="true">www.example.com</domain>
          <domain includeSubdomains="true">notsecure.com</domain>
          <domain includeSubdomains="false">xxx.xxx.xxx</domain>
    </domain-config>
</network-security-config>

您也可以使用 UsesCleartextTraffic 上的参数 ApplicationAttribute :

#if DEBUG
[Application(AllowBackup = false, Debuggable = true, UsesCleartextTraffic = true)]
#else
[Application(AllowBackup = true, Debuggable = false, UsesCleartextTraffic = true))]
#endif
Erick M. Sprengel
Reply   •   7 楼
Erick M. Sprengel    5 年前

对于React本机项目

它已经固定在0.59雷恩。 你可以找到 upgrade diff from 0.58.6 to 0.59 您可以在不升级RN版本的情况下应用它,请执行以下步骤:

创建文件:

android/app/src/ debug /res/xml/react_native_config.xml -

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="false">localhost</domain>
    <domain includeSubdomains="false">10.0.2.2</domain>
    <domain includeSubdomains="false">10.0.3.2</domain>
  </domain-config>
</network-security-config>

android/app/src/ debug /AndroidManifest.xml -

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools">

  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

  <application tools:targetApi="28"
      tools:ignore="GoogleAppIndexingWarning" 
      android:networkSecurityConfig="@xml/react_native_config" />
</manifest>

检查接受的答案以了解根本原因。

david.s
Reply   •   8 楼
david.s    6 年前

好吧,我已经想好了。这是由于manifest参数 android:targetSandboxVersion="2" ,这是我添加的,因为我们也有即时应用程序版本-它应该确保用户从即时应用程序升级到普通应用程序后,不会在传输时丢失数据。然而,正如模糊的描述所示:

指定此应用程序要使用的目标沙盒。更高的sanbox版本将具有更高的安全级别。

此属性的默认值为1。

显然,它还增加了新的安全策略级别,至少在android 8上是这样。

suther
Reply   •   9 楼
suther    5 年前

好吧,就是这样 不是 成千上万的重复 将其添加到清单中 ,但是一个基于此的提示,但是给你 附加福利 (也许还有一些背景信息)。

android有一种src目录的覆盖功能。

默认情况下,您有

/应用/源/ 主要的

但是可以添加其他目录来覆盖androidmanifest.xml。它的工作原理如下:

  • 创建目录 /应用程序/src/debug
  • 在内部创建androidmanifest.xml

在这个文件里面,你 不要 必须把所有的规则都放进去,但只有你喜欢的规则 覆盖 从您的/app/src/ main/androidmanifest.xml文件

下面是请求的cleartext权限的外观示例:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.yourappname">

    <application
            android:usesCleartextTraffic="true"
            android:name=".MainApplication"
            android:label="@string/app_name"
            android:icon="@mipmap/ic_launcher"
            android:allowBackup="false"
            android:theme="@style/AppTheme">
    </application>

</manifest>

有了这些知识,现在您可以轻松地1、2、3重载您的权限,具体取决于 调试主释放 环境。

最大的好处是…您的产品清单中没有调试内容,并且您保持了一个简单易维护的结构

sparkly_frog
Reply   •   10 楼
sparkly_frog    5 年前

它可能对某人有用。

我们最近在android 9上遇到了同样的问题,但是我们只需要在webview中显示一些url,没有什么特别的。所以添加 android:usesCleartextTraffic="true" 显式成功了,但我们不想为此损害整个应用程序的安全性。 所以修复方法是从 http https

Lorence
Reply   •   11 楼
Lorence    5 年前
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">***Your URL(ex: 127.0.0.1)***</domain>
    </domain-config>
</network-security-config>

在上面的建议中,我提供了我的url作为 http://xyz.abc.com/mno/

我改成了 xyz.abc.com网站 然后它开始工作了。

Pablo Cegarra
Reply   •   12 楼
Pablo Cegarra    5 年前

我的问题 安卓9 在Web视图上使用HTTP在域上导航 解决方案来自 this answer

<application 
    android:networkSecurityConfig="@xml/network_security_config"
    ...>

还有:

res/xml/network_security_config.xml文件

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>
Nilesh Rathod anju jo
Reply   •   13 楼
Nilesh Rathod anju jo    5 年前

更改您的URL HTTP HTTPS ;

成功了!!!!

Tyler
Reply   •   14 楼
Tyler    5 年前

您可能只希望在调试时允许使用cleartext,但要保留在生产中拒绝使用cleartext的安全好处。这对我很有用,因为我在不支持https的开发服务器上测试我的应用程序。下面是如何在生产中强制使用https,但在调试模式下允许使用cleartext:

在build.gradle中:

// Put this in your buildtypes debug section:
manifestPlaceholders = [usesCleartextTraffic:"true"]

// Put this in your buildtypes release section
manifestPlaceholders = [usesCleartextTraffic:"false"]

在androidmanifest.xml中的应用程序标记中

android:usesCleartextTraffic="${usesCleartextTraffic}"
Praveenkumar byOnti
Reply   •   15 楼
Praveenkumar byOnti    4 年前

在AndroidManifest中,我找到了以下参数:

android:networkSecurityConfig="@xml/network_security_config"

并且@xml/network_security_config在network_security_config.xml中定义为:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <!--Set application-wide security config using base-config tag.-->
    <base-config cleartextTrafficPermitted="false"/>
</network-security-config>  

只是我把cleartexttrafficpermitted改成了true

Hrishikesh Kadam
Reply   •   16 楼
Hrishikesh Kadam    4 年前

根据 Network security configuration -

从android 9(api级别28)开始,cleartext支持被禁用 默认情况下。

也看看- https://koz.io/android-m-and-the-war-on-cleartext-traffic/

选择1-

创建文件res/xml/network_security_config.xml-

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
</network-security-config>

androidmanifest.xml文件-

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>

选择2-

android:usesCleartextTraffic Doc

androidmanifest.xml文件-

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>

也作为 @david.s' answer 指出 android:targetSandboxVersion 也可能是个问题-

根据 Manifest Docs -

安卓:目标沙盒版

此应用程序要使用的目标沙盒。沙盒版本越高 数字,安全级别越高。它的默认值是1;您 也可以设置为2。将此属性设置为2将应用程序切换到 一个不同的selinux沙盒。以下限制适用于 二级沙箱:

  • 的默认值 usesCleartextTraffic 在网络安全配置中为false。
  • 不允许uid共享。

所以选择3-

如果你有 安卓:目标沙盒版 在里面 <manifest> 然后减少到 1

androidmanifest.xml文件-

<?xml version="1.0" encoding="utf-8"?>
<manifest android:targetSandboxVersion="1">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>