使用 Volley 进行令牌认证

2024-01-08

如果我有一个服务器,我可以使用用户名/密码进行身份验证并为后续请求获取身份验证令牌,那么解决此问题的最佳方法是什么?

流程应该是这样的: - 开始请求 - 如果我们没有身份验证令牌 - 使用用户名和密码获取它 - 使用身份验证令牌发出请求 - 如果请求因令牌过期而失败,则使用用户名和密码获取新的身份验证令牌 - 使用新的身份验证令牌重试请求 - 结束

我注意到 Volley 可能已经有一些可以解决这个问题的东西 - Authenticatorhttps://android.googlesource.com/platform/frameworks/support/+/4474bc11f64b2b274ca6db5a1e23e8c1d143d5fa/volley/src/com/android/volley/toolbox/Authenticator.java https://android.googlesource.com/platform/frameworks/support/+/4474bc11f64b2b274ca6db5a1e23e8c1d143d5fa/volley/src/com/android/volley/toolbox/Authenticator.java它包含 getAuthToken() 和 invalidateAuthToken() 方法,这正是我想要的。但图书馆里似乎根本没有用过它。


我将 volley 用于使用长寿命 (LLT) 和短寿命 (SLT) 令牌的身份验证系统。

我是手动完成的,但一旦你把所有的东西都安排好了,这真的没什么工作。

让所有安全请求子类化为一个 baseSecureRequest,可以在其 onResponse() 和 onErrorResponse() 中处理所有安全请求所共有的令牌机制。

它变成了一点node.js 风格,其中请求发送其他请求并等待回调。


一个应用程序可能有十几个屏幕,其中只有一半需要身份验证访问 - 因此每个屏幕都应该不了解其请求的要求。

场景A

  • 我们尝试发送安全请求。我们注意到我们没有 SLT 内存,所以创建一个TokenRequest。
  • TokenRequest的onResponse()保存 该令牌到内存(让单例会话管理器保留它或 类似的无所不在的类别)
  • 现在回调到原来的 具体类请求对象继续使用新更新的令牌。

场景B

  • 我们发送了安全请求,但我们的 SLT 已过时(已过期)

  • 服务器返回错误代码或消息,您可以在 baseSecureRequest 的一般 onErrorResponse() 。

  • 在此 onError() 中,您发送一个refreshTokenRequest() 对象,该对象 尝试通过使用 LLT 从服务器请求新的 SLT 来刷新内存中的 SLT。

  • 现在,refreshTokenRequest 的 onResponse() 可以回调到 原来的重发请求。

  • 然而 onErrorResponse() 可能应该放弃整个事情,因为机会是 任何不是连接错误的错误都是由以下原因引起的 无效的 LLT。如果您继续尝试使用糟糕的 LLT 进行刷新,您将永远无法退出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Volley 进行令牌认证 的相关文章

  • 如何在 Android 中保存相机的临时照片?

    在尝试从相机拍照并将其保存到应用程序的缓存文件夹中时 我没有得到任何可见的结果 应用程序不会崩溃 但在 LogCat 上 当我尝试将 ImageView src 字段设置为刚刚获取的文件的 URI 时 我收到此消息 09 17 14 03
  • 在包“android”中找不到属性“backgroundTint”的资源标识符

    我发现了一些视图 xml 属性 例如backgroundTint backgroundTintMode 但是当我使用它作为视图属性定义时 Eclipse 显示错误 No resource identifier found for attri
  • React Native 从 JavaScript 代码内部访问 strings.xml

    有没有办法访问当前值android app src main res values strings xml从 JavaScript 代码内部 我想为每个构建放置不同的端点 URL 但我什至无法检测到反应本机代码内的构建类型 而不必求助于 D
  • 找不到 com.google.firebase:firebase-core:9.0.0 [重复]

    这个问题在这里已经有答案了 在遵循有些不一致的指示之后here https firebase google com docs admob android quick start name your project and here http
  • 是否可以将数组或对象添加到 Android 上的 SharedPreferences

    我有一个ArrayList具有名称和图标指针的对象 我想将其保存在SharedPreferences 我能怎么做 注意 我不想使用数据库 无论 API 级别如何 请检查SharedPreferences 中的字符串数组和对象数组 http
  • Adobe 是否为其 PDF 阅读器提供 Android SDK 或 API? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在我们的应用程序内的视图中显示本地 PDF 文件 在 Android 4 03 下的平板电脑上运行 目前 我们将 Adob eR
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • Google 云端硬盘身份验证异常 - 需要许可吗? (v2)

    我一直在尝试将 Google Drive v2 添加到我的 Android 应用程序中 但无法获得授权 我收到 UserRecoverableAuthIOException 并显示消息 NeedPermission 我感觉 Google A
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • Android Studio 0.4.3 Eclipse项目没有gradle

    在此版本之前 在 Android Studio 中按原样打开 Eclipse 项目似乎很容易 无需任何转换 我更喜欢 Android Studio 环境 但我正在开发一个使用 eclipse 作为主要 IDE 的项目 我不想只为这个项目下载
  • Android访问远程SQL数据库

    我可以直接从 Android 程序访问远程 SQL 数据库 在网络服务器上 吗 即简单地打开包含所有必需参数的连接 然后执行 SQL 查询 这是一个私人程序 不对公众开放 仅在指定的手机上可用 因此我不担心第三方获得数据库访问权限 如果是这
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • .isProviderEnabled(LocationManager.NETWORK_PROVIDER) 在 Android 中始终为 true

    我不知道为什么 但我的变量isNetowrkEnabled总是返回 true 我的设备上是否启用互联网并不重要 这是我的GPSTracker class public class GPSTracker extends Service imp
  • 如何确定对手机号码的呼叫是本地呼叫还是 STD 或 ISD

    我正在为 Android 开发某种应用程序 但不知道如何获取被叫号码是本地或 STD 的号码的数据 即手机号码检查器等应用程序从哪里获取数据 注意 我说的是手机号码 而不是固定电话 固定电话号码 你得到的数字是字符串类型 因此 您可以获取号
  • 实现滚动选择 ListView 中的项目

    我想使用 ListView 您可以在其中滚动列表来选择一个项目 它应该像一个 Seekbar 但拇指应该是固定的 并且您必须使用该栏来调整它 我面临的一个问题是 我不知道这种小部件是如何调用的 这使得我很难搜索 所以我制作了下面这张图片 以
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • 强制 Listview 不重复使用视图(复选框)

    我做了一个定制Listview 没有覆盖getView 方法 Listview 中的每个项目都具有以下布局 联系布局 xml

随机推荐

  • Symfony2 Capifony 部署 setfacl 缓存目录不允许操作

    我正在使用 Capifony 多阶段部署将我的 Symfony2 Web 应用程序部署到 AWS 上托管的 Ubuntu 计算机上的 Apache Web 服务器上 我有用户设置 set user ubuntu 以及缓存设置的可写目录 如下
  • VS 2012 IIS Express 8 - 无法启动 IIS Express Web 服务器

    我试图在 IIS Express 8 中运行 MVC 4 项目 因为这显然是 VS 2012 附带的 每次我尝试从 VS 运行它时 都会收到以下错误 无法启动 IIS Express Web 服务器 14 53 48 错误 无法初始化 OL
  • 如何在 Objective-C 中模拟受保护的属性和方法 [重复]

    这个问题在这里已经有答案了 可能的重复 Objective c 中的受保护方法 https stackoverflow com questions 3725857 protected methods in objective c 声明私有属
  • 为什么转换(unsigned long long)DBL_MAX(或FLT_MAX)也会导致FE_INEXACT的升高?

    代码 t1 c include
  • 在页面激活上启动工作流程,而无需激活 CQ5 中的页面

    每当内容作者在页面上单击 激活 时 我都需要调用工作流程 然后 工作流将向管理员发送通知 然后管理员继续激活该页面 让我更详细地解释一下 这有 2 部分 i 每当内容作者完成页面修改后 他就会继续单击 激活页面 来自 sidekick 或站
  • Rails - 部署中的失败路由

    我有一个应用程序 其路由文件中包含以下内容 namespace admin do ADMINISTRATIVE ROUTES ONLY root to gt home index resources comments do member d
  • PySpark:向数据框行元素添加新字段

    我有以下元素 a Row ts 1465326926253 myid u 1234567 mytype u good Row是Spark数据框架的Row类 我想追加一个新字段a 以便a看起来像 a Row ts 1465326926253
  • c#:与文件扩展名关联的图标

    在我的应用程序中 我创建扩展名为 mprj 的文件 如何为这种类型的文件分配图标 是否存在合适的 Net 方法 您需要修改注册表项 可以在此处找到如何使用 C 的代码片段 http mel green com 2009 04 c set f
  • 如何管理 std::list 元素作为引用?

    我有以下代码 struct Foo int var1 int var2 friend std ostream operator lt lt std ostream os const Foo s return os lt lt Foo lt
  • 防止 Spring MVC 控制器中的 XSS

    您好 在我的项目 Veracode 中报告了 XSS 问题 CWE ID 80 在我的请求处理程序方法中 RequestMapping value Update mvc public ResponseBody String execute
  • 为什么比较运算符从 C++ 20 的标准库容器中删除?

    我正在浏览参考参数 https en cppreference com w cpp container vector operator cmp看到了vector的比较操作已在 C 20 中删除 并且太空船运算符 lt gt 已被引入 对于许
  • mariadb 服务器:我无法使用“mysql.server stop”停止服务器

    操作系统 10 13 6 几年前我用 homebrew 安装了 mariadb 服务器 但我很少使用它 今天 我尝试使用以下命令启动 mariadb mysql server start 我遇到了很多错误 所以我做了 brew update
  • 初始化参考

    虽然我以为我明白了rvalue and lvalue对于 C 中的语义 我似乎一次又一次地陷入奇怪的例子中 这些例子向我证明我不知道蹲下 然而 有两个非常简单和基本的 我不明白它们是如何工作的 在我编译它们之前 我认为没有一个是可以的 在我
  • 在 shell 脚本中将带引号的参数传递给 C 程序

    我有一个 C 程序 main 它获取以下参数 abc d e f g 由于引用 总共有 4 个参数 我有一个文本文件 每行都有这 4 个参数 我制作了一个 shell 脚本来为每个参数运行 C 程序 bin bash while read
  • Bootstrap 网格拉/推行

    我有一个响应式引导网格 我希望根据设备宽度以不同的顺序显示它 sm 或更低 1 2 3 4 5 6 7 MD 或更高 2 4 6 1 3 5 7
  • Excel宏重复IF和Else

    我目前正在编写一个 Excel VBA 宏脚本 其中将对活动单元格进行简单的 TRUE 或 False 测试 我的问题是 直到列表末尾我才能使其正常工作 它只运行一次并结束程序 我需要这个 VB 脚本来执行 IF ELSE 测试 直到列表底
  • ASM-创建过程[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 设置了阵列A和阵列B 该过程将获取值
  • 如何在 Yocto bitbake 编译步骤中剥离和 objcopy 构建的 .so 文件?

    这个问题源于 我是否需要编辑在 Yocto 中构建 mdns 878 200 35 所需的 patch 文件 https stackoverflow com questions 66400231 do i need to edit the
  • 谷歌怎么能这么快?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 哪些技术和编程决策使 Google 能够如此快速地提供查询服务 每次我搜索某些内容 每天搜索几
  • 使用 Volley 进行令牌认证

    如果我有一个服务器 我可以使用用户名 密码进行身份验证并为后续请求获取身份验证令牌 那么解决此问题的最佳方法是什么 流程应该是这样的 开始请求 如果我们没有身份验证令牌 使用用户名和密码获取它 使用身份验证令牌发出请求 如果请求因令牌过期而