java - GAE 的身份验证策略

标签 java google-app-engine authentication

我有一个应用程序部署到 Google App Engine。在该应用程序中,有 2 个角色:标准用户和管理员。我有基于表单的身份验证设置,并且需要身份验证的 URL(例如/admin 和/account)被设置为需要任何角色 (*),这样我就可以确定 Google 已经对它们进行了身份验证。我为管理路径以及帐户路径设置了一个过滤器,该路径与后端业务逻辑对话,以查看用户在我的应用程序中是否有帐户,然后再将其转发到他们请求的页面,或在必要时进行重定向。

这看起来很麻烦,因为对于每个请求,过滤器都会使用 UserService 来获取 google 用户,以确定经过 google 身份验证的人员是否在应用程序中拥有帐户。我知道,在部署到传统应用程序服务器的应用程序上下文中,我实际上可以定义访问 url 所需的应用程序级别角色,并且由于应用程序服务器会了解应用程序的角色/用户,因此这就足够了,但由于谷歌正在处理身份验证,我是否正确地假设我必须在每个请求的基础上处理访问要求,就像我现在使用过滤器一样?我选择使用过滤器来尝试保持实际的 servlet“更干净”,这样我就知道当客户端请求到达 servlet 时,它们已经过身份验证并有权访问这些资源。

在 session 中携带这些数据(无论用户是否经过身份验证以及他们是管理员还是标准用户)是否明智?这是我能想到的唯一的其他选择。我不确定为每个请求访问 UserService 的成本有多高,因为这反过来又要访问数据存储区。我想必须有一种更好的方法来处理身份验证。

最佳答案

不太确定这是否是最佳解决方案,但我们现在所做的是存储用户 session (我们自己的实现,而不是 GAE),并使用 Objecitfy 的缓存功能积极缓存它。这样,我们只在登录/注销时访问数据存储,之后的大多数查询几乎都是免费的(由于我们的应用程序使用标准 session 时间,缓存刷新并不是真正的问题)

关于java - GAE 的身份验证策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29808279/

相关文章:

java - 将一些值放入数组的 for 循环中

java - Mac 10.8 上的 Eclipse - 安装了 1.7.0 JRE/JDK,但 Eclipse 无法启动

Java - Android - NoClassDefFoundError - Logcat 中的 "Could not find class"错误

authentication - 推送包时如何避免nuget认证?

authentication - 如何在 Jenkins 中设置多种身份验证方式,例如 LDAP 和 Jenkins 用户数据库?

java - 只有当它不匹配另一个模式时,如何替换所有匹配的模式?

python从字符串中导入代码

python - Google Cloud Shell 使用的是 project=cloud-devshell-dev 而不是我的实际项目,找不到已启用的 API

android - 使用 Google App Engine 在 Android 中推送通知

java - 使用客户端登录授权 Google 云端硬盘服务 java?