java - 使用 session 进行多级登录用户和管理员?

标签 java android authentication session

我有一个项目,使用多级 session 以及具有不同 Activity 的用户登录和管理员登录在 Android studio 中创建登录应用程序。

例如,如果管理员单击登录按钮,则会转到管理 Activity 。如果用户点击,则会转到用户 Activity 。这一切都已经奏效了;但是,问题是,如果我使用管理员登录并按两次后退按钮关闭应用程序而不注销,之后我尝试重新打开应用程序,但出现的不是 user activity(**MainActivity**)管理 Activity (**AdminActivity**) ....

你有办法帮助我吗?抱歉,如果我的英语不好/

package com.example.ilvan.gogas;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.example.ilvan.gogas.app.AppController;
import com.example.ilvan.gogas.util.Server;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.HashMap;
import java.util.Map;


public class Login extends AppCompatActivity {

    ProgressDialog pDialog;
    EditText txtusername, txtpassword;
    Button btnLogin;
    TextView btnRegister;


    int success;
    ConnectivityManager conMgr;

    private String url = Server.URL + "checkLogin.php";

    private static final String TAG = com.example.ilvan.gogas.Login.class.getSimpleName();

    private static final String TAG_SUCCESS = "success";
    private static final String TAG_MESSAGE = "message";

    public final static String TAG_USERNAME = "username";
    public final static String TAG_ID = "user_id";
    public final static String TAG_USERTYPE = "user_type";

    String tag_json_obj = "json_obj_req";
    SharedPreferences sharedpreferences;
    Boolean session = false;
    String user_id, username,user_type;

    public static final String my_shared_preferences = "my_shared_preferences";
    public static final String session_status = "session_status";

    final String MESSAGE_NO_INTERNET_ACCESS = "No Internet Connection";
    final String MESSAGE_CANNOT_BE_EMPTY = "Kolom Tidak Boleh Kosong";
    final String MESSAGE_LOGIN = "Logging in ...";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        {
            if (conMgr.getActiveNetworkInfo() != null
                    && conMgr.getActiveNetworkInfo().isAvailable()
                    && conMgr.getActiveNetworkInfo().isConnected()) {
            } else {
                Toast.makeText(getApplicationContext(), MESSAGE_NO_INTERNET_ACCESS,
                        Toast.LENGTH_LONG).show();
            }
        }

        btnLogin = (Button) findViewById(R.id.btn_login);
        btnRegister = (TextView) findViewById(R.id.lbl_register);
        txtusername = (EditText) findViewById(R.id.txt_username);
        txtpassword = (EditText) findViewById(R.id.txt_password);

        // Cek session login jika TRUE maka langsung buka halaman setelah login
        sharedpreferences = getSharedPreferences(my_shared_preferences, Context.MODE_PRIVATE);
        session = sharedpreferences.getBoolean(session_status, false);
        user_id = sharedpreferences.getString(TAG_ID, null);
        username = sharedpreferences.getString(TAG_USERNAME, null);
        user_type = sharedpreferences.getString(TAG_USERTYPE, null);

        if (session) {
            Intent intent = new Intent(Login.this, MainActivity.class);
            intent.putExtra(TAG_ID, user_id);
            intent.putExtra(TAG_USERNAME, username);
            finish();
            startActivity(intent);

        }

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String username = txtusername.getText().toString();
                String password = txtpassword.getText().toString();

                // mengecek kolom yang kosong
                if (username.trim().length() > 0 && password.trim().length() > 0) {
                    if (conMgr.getActiveNetworkInfo() != null
                            && conMgr.getActiveNetworkInfo().isAvailable()
                            && conMgr.getActiveNetworkInfo().isConnected()) {
                        checkLogin(username, password);
                    } else {
                        Toast.makeText(getApplicationContext(), MESSAGE_NO_INTERNET_ACCESS, Toast.LENGTH_LONG).show();
                    }
                } else {
                    // Prompt user to enter credentials
                    Toast.makeText(getApplicationContext(), MESSAGE_CANNOT_BE_EMPTY, Toast.LENGTH_LONG).show();
                }
            }
        });

        btnRegister.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                Intent intent = new Intent(Login.this, Register.class);
                Login.this.startActivity(intent);
            }
        });
    }

    private void checkLogin(final String username, final String password) {
        pDialog = new ProgressDialog(this);
        pDialog.setCancelable(false);
        pDialog.setMessage(MESSAGE_LOGIN);
        showDialog();

        StringRequest strReq = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {

            @Override
            public void onResponse(String response) {
                Log.e(TAG, "Login Response: " + response.toString());
                hideDialog();

                try {
                    JSONObject jObj = new JSONObject(response);
                    success = jObj.getInt(TAG_SUCCESS);

                    // Check for error node in json
                    if (success == 1) {
                        String username = jObj.getString(TAG_USERNAME);
                        String user_type = jObj.getString(TAG_USERTYPE);
                        String id = jObj.getString(TAG_ID);

                        Log.e("Successfully Login!", jObj.toString());

                        Toast.makeText(getApplicationContext(), jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();

                        // menyimpan login ke session
                        SharedPreferences.Editor editor = sharedpreferences.edit();
                        editor.putBoolean(session_status, true);
                        editor.putString(TAG_ID, id);
                        editor.putString(TAG_USERNAME, username);
                        editor.commit();

                        // Memanggil halaman setelah login
                        if (session && user_type.contentEquals("penjual")) {
                            Intent intent = new Intent(com.example.ilvan.gogas.Login.this, MainActivityPenjual.class);
                            intent.putExtra(TAG_ID, id);
                            intent.putExtra(TAG_USERNAME, username);
                            finish();
                            startActivity(intent);

                        } else {
                            Intent intent = new Intent(Login.this, MainActivity.class);
                            intent.putExtra(TAG_ID, id);
                            intent.putExtra(TAG_USERNAME, username);
                            finish();
                            startActivity(intent);
                        }
                    } else {
                        Toast.makeText(getApplicationContext(),
                                jObj.getString(TAG_MESSAGE), Toast.LENGTH_LONG).show();
                        Log.e("username : ", username);
                        Log.e("password : ",password);
                    }
                } catch (JSONException e) {
                    // JSON error
                    e.printStackTrace();
                }

            }
        }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Login Error: " + error.getMessage());
                Toast.makeText(getApplicationContext(),
                        error.getMessage(), Toast.LENGTH_LONG).show();

                hideDialog();

            }
        }) {

            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                // Posting parameters to login url
                Map<String, String> params = new HashMap<String, String>();
                params.put("username", username);
                params.put("password", password);

                return params;
            }

        };

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(strReq, tag_json_obj);
    }

    private void showDialog() {
        if (!pDialog.isShowing())
            pDialog.show();
    }

    private void hideDialog() {
        if (pDialog.isShowing())
            pDialog.dismiss();
    }
}


最佳答案

解决方案很简单,只需用您在上次 Activity 中注销的方法覆盖 onBackPressed 方法即可

@Override
    public void onBackPressed() {
            super.onBackPressed();  
            logout();
      }
    }

并且您可以根据需要定义 logout() 方法。

关于java - 使用 session 进行多级登录用户和管理员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57484927/

相关文章:

java - JDBC 给我参数索引超出范围(1 > 参数数量,即 0)

java - 我的 Java 8 源代码的 Maven 编译失败

android - 用于在 Activity 之间切换的抽屉导航

android 按钮在 listview 之上

android:lineSpacingMultiplier 在 android:textAppearance 中不起作用

facebook - node.js - everyuth - Facebook API 和 session 处理

java - 标记 <uses-permission> 缺少必需的属性名称

php - 实现 Web 服务登录的最佳方式是什么?

java - 使用 j_security_check 验证用户身份

java - org.languagetool 包不存在