app登录权限java实现_Android App登录权限处理设计

应用场景

应用启动时检测当前 token 是否失效

调用api时需要登录权限时,token 失效怎么进行拦截

账号管理类

我们设计一个管理者的实现,用来记录 token、当前是否在线状态。类似代码如下

public class AccountManager{

private boolean isOnline;

private String token;

public void setOnline(boolean isOnline){

this.isOnline = isOnline;

}

public void setToken(String token){

this.token = token;

}

public boolean isOnline(){

return isOnline && !TextUtils.isEmpty(token);

}

public String getToken(){

return this.token;

}

public void logout(){

this.isOnline = false;

this.token = null;

}

}

这个管理类要设计成单例模式。如果 token 需要缓存到本地,可直接在本类中去实现,比如在方法 setToken() 方法中

流程设计

应用启动时,可通过 AccountManager 类获取 token,用此 token 去请求接口校验是否失效,如果有效,就调用方法 setOnline(true) 设置在线状态;如果失效,就调用方法 logout() 方法,清除在线信息。

那么在具体操作的时候,怎么去拦截并打开登录页面了?

在操作到需要登录权限的业务时,通过 AccountManager.isOnline() 方法判断当前是否在线,如果不在线,那么就打开登录页面,成功后返回。一般建议采用 startActivityForResult() 方法去打开登录页面,然后登录成功回来时,可在 onActivityResult() 方法中去判断 requestCode 来区分要做的操作,这样就实现了登录成功后自动执行用户之前的操作

利用后台接口返回的错误码。当用户操作时,不做任何判断,直接执行,待后端接口返回错误码,通过判断错误码,然后在去打开登录页面,登录成功后回来通过 requestCode 继续请求接口进行操作

两种方法可分具体产景去采用

上代码

AccountManager.java

public final class AccountManager {

private static AccountManager instance;

private final SharedPreferences mSharedPreferences;

private boolean isOnline;

private String token;

private AccountManager(Application context) {

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);

isOnline = mSharedPreferences.getBoolean("isOnline", false);

token = mSharedPreferences.getString("token", null);

}

public static AccountManager getInstance(Application application) {

if (instance == null) {

instance = new AccountManager(application);

}

return instance;

}

public void setOnline(boolean isOnline) {

this.isOnline = isOnline;

mSharedPreferences.edit().putBoolean("isOnline", isOnline).apply();

}

public void setToken(String token) {

this.token = token;

mSharedPreferences.edit().putString("token", token).apply();

}

public boolean isOnline() {

return isOnline && !TextUtils.isEmpty(token);

}

public String getToken() {

return token;

}

public void logout() {

setOnline(false);

setToken(null);

}

}

***Activity.java

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

......

requestApi();

}

/**

* 某一个操作

*/

public void actionA() {

if (AccountManager.getInstance(getApplication()).isOnline()) {

// 正常操作

}else{

startActivityForResult(new Intent(this,LoginActivity.class),100);

}

}

/**

* 请求 api

*/

public void requestApi(){

}

/**

* api 返回结果

*/

public void onApiResponse(int code) {

if (code == 999) {

startActivityForResult(new Intent(this,LoginActivity.class),200);

}else{

// 正常操作

}

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 100 && resultCode == Activity.RESULT_OK) {

actionA();

} else if (requestCode == 200 && resultCode == Activity.RESULT_OK) {

requestApi();

}

}

}

LoginActivity.java

public class LoginActivity extends AppCompatActivity {

/**

* 登录成功

*/

public void onLoginSuccess() {

setResult(Activity.RESULT_OK);

finish();

}

}

END

此方法如果对你有用,请收藏;如果你有更好的方法设计,希望能得到留言指点,谢谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值