未找到认证路径的信任锚点 - 使用 Volley 的 https POST 请求不起作用

问题描述

这个问题经常被问到,但所有的答案都是两三年前的。我登录了我的 Android 应用程序,日期保存在我的云服务器上的 MySQL 数据库中,该数据库具有 SSL 证书。 当我在本地机器上测试我的应用程序时一切正常,但是当我尝试连接我的云服务器时,我收到消息“未找到认证路径的信任锚”。我的凭据没问题。 我知道我必须设置一个 sslSocketFactory。我尝试了很多,但一个奏效了。我现在坐了好几天。可能有人知道如何解决

这里我的代码没有 sslSocketFactory

public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.logintest,container,false);

        btn_login = view.findViewById(R.id.btn_logintest);
        email = view.findViewById(R.id.etEmail);
        password = view.findViewById(R.id.etPassword);

        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                login();
            }

            public void login() {

                str_email = email.getText().toString();
                str_password = password.getText().toString();

                if(!str_email.equals("") && !str_password.equals("")) {

                    StringRequest request = new StringRequest(Request.Method.POST,URL_LOGIN,new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            
                            FragmentManager fragmentManager = getFragmentManager();
                            FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
                            DummyFragment dummyFragment = new DummyFragment();
                            fragmentTransaction.replace(R.id.container,dummyFragment);
                            fragmentTransaction.addToBackStack(null);
                            fragmentTransaction.commit();

                            Log.e("Text: ",response);
                            Toast.makeText(getActivity(),"erfolgreicher Text: " +response,Toast.LENGTH_LONG).show();
                        }
                    },new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getActivity(),"Text: " +error.getMessage().toString(),Toast.LENGTH_SHORT).show();
                        }
                    }
                    ) {
                        @Override
                        protected Map<String,String> getParams() throws AuthFailureError {
                            Map<String,String> params = new HashMap<>();
                            params.put("str_email",email.getText().toString());
                            params.put("str_password",password.getText().toString());
                            return params;
                        }

                        @Override
                        public Map<String,String> getHeaders() throws AuthFailureError {
                            try {
                            HashMap<String,String> headers = new HashMap<>();
                                String credentials = "xxxxxxxxx:xxxxxxxxxx";
                                String auth = "Basic "
                                        + Base64.encodeToString(credentials.getBytes(),Base64.NO_WRAP);
                            headers.put("Content-Type","application/json");
                            headers.put("Authorization",auth);
                            return headers;
                        } catch (Exception e) {
                                Log.e(TAG,"Authentication failure");
                                Toast.makeText(getActivity(),"" +e,Toast.LENGTH_LONG).show();
                            }
                            return super.getHeaders();
                        }
                    };
                    RequestQueue requestQueue = Volley.newRequestQueue(getActivity().getApplicationContext());
                    requestQueue.add(request);
                }
                else {
                    if (email.getText().toString().equals("")) {
                        Toast.makeText(getActivity(),"Bitte Email Adresse eingeben",Toast.LENGTH_SHORT).show();
                    } else if (password.getText().toString().equals("")) {
                        Toast.makeText(getActivity(),"Bitte Passwort eingeben",Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
        return view;
    }
}

我尝试了 android 开发者页面上的代码,但出现了一些错误。我试图设置 network_security.xml 但它对我不起作用。当我用邮递员测试我的凭据时,我得到了 200 的响应。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)