java - 我应该将 token 安全地保存在内存或 sqlite 中吗?或者请建议

标签 java android storage

几天前我开始学习 Android,到目前为止我已经完成了登录 Activity 的实现,主要 Activity 扩展了抽象的基本 Activity 。

点击导航栏项目时会从 Fragments 中打开 xml。

我对成功登录后收到的 token 有疑问。此 token 与每个请求一起使用,以在成功登录后获取数据。我应该将 token 安全地保存在 sqlite 数据库中,还是应该在主 Activity 中创建一个公共(public)属性? Main Activity 将始终保留在内存中,因为这将打开 fragment 。

最佳答案

我可以建议 3 个选项: 1) 您可以将 token 保存到文件中,如下所示:

public static void saveToken(Context ctx, String fileName, Object token) {
        if (token == null) {
            ctx.deleteFile(fileName);
        } else {
            ObjectOutputStream out = null;
            try {
                FileOutputStream fout = ctx.openFileOutput(fileName, 0);
                out = new ObjectOutputStream(fout);
                out.writeObject(token);
                fout.getFD().sync();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    if (out != null)
                        out.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

确保对象 token 实现了 java.io.Serializable 接口(interface)

API 级别 24 之前的用法:

saveToken(appContext, someFileName, someTokenObject);

API 级别 24 及更高级别的用法:

saveToken(appContext.createDeviceProtectedStorageContext(), someFileName, someTokenObject);

2) 使用SQLCipher库加密数据库。

3) 您可以使用 keystore 系统加密您的 token https://developer.android.com/training/articles/keystore.html

关于java - 我应该将 token 安全地保存在内存或 sqlite 中吗?或者请建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42922921/

相关文章:

Android,存储自定义ArrayList

java - 加载用于发送电子邮件的 FreeMarker 模板

java - 使用 SimpleDateFormat 解析日期

java - ClassNotFoundException:无法运行应用程序

storage - 卷和分区有什么区别?

c++ - 在 C++ 中什么时候进行存储分配?

java - 我如何在 JSP 页面中获取任何字符串值

java - 迷宫求解器问题(出现堆栈溢出错误)

android - ActionBarSherlock Action Item 的自定义下拉

android - 将ObjectBox的@Entity类与kotlinx.serialization组合会导致冲突