【问题标题】:Add GET Parameters to Play Framework 2.2 Response在 Play Framework 2.2 响应中添加 GET 参数
【发布时间】:2014-04-29 07:06:15
【问题描述】:

我有一个 Play Framework 2.2.2 版应用程序。这很简单。我正在扩展Security.Authenticator 来处理我的请求身份验证。

我正在(通过请求,GETPOST)传递域上另一个应用程序生成的授权令牌。这个令牌在数据库中查找,最终会为用户返回 userId(而不是像 Play 演示中的字符串 userName

我想做的是将userId附加到GET,以便我可以使用Javascript提取参数,因为我目前拥有的所有JS代码都依赖于userId,而不是身份验证令牌。

有什么方法可以做到这一点,还是我试图以错误的方式解决这个问题?除非不可能,否则我需要避免使用 cookie。

谢谢!

编辑

这是我打算逐步分解的内容:

  • 前端 JS 通过来自浏览器的 GET 请求向 Play 应用发出请求(例如,http://mycompany.com/playapp/home?authToken=5hgys7Sgh2u4iblahblah
  • 请求包含authToken参数,用于在用户授权数据库表中查找
  • Play Security.Authenticator 在请求到达目标控制器之前拦截请求(假设控制器是 Application.java) - 扩展Security.AuthenticatorSecured 类在我的GET 数据中查找authToken。 - 该值用于对userId 进行反向查找。 -Securedpublic String getUsername(Http.Context ctx) 被覆盖以将 userId 作为字符串返回(例如,"1234")。

现在我想做的是修改 URL 以在其中附加 userId(例如http://mycompany.com/playapp/home?authToken=5hgys7Sgh2u4iblahblah&userId=1234

我不完全确定这是可能的...但我只想说,我需要通过浏览器发出请求,进行身份验证,然后,在成功请求后,让 javascript 知道 userId 是什么是。我想在不设置 cookie 的情况下执行此操作,但现在似乎不太可能,我想的越多……

更新:

所以我最终做的是在我的 Secured.java 中设置我的 userId,如下所示:

ctx.session().put("userId", userId);

然后,从任何方法通过注释验证,我从会话中检索userId,如下所示:

Integer userId = Integer.parseInt(ctx().session().get("uid"));

然后我将 userId 传递给我的页面模板,并将其插入到 Javascript 变量中。像魅力一样工作,不需要饼干。

【问题讨论】:

  • 你混合了一些东西......响应没有方法......你能告诉我们你的方法吗?
  • 是的,请看我的编辑。
  • 为什么要避免设置cookie?
  • @JasonPearson - 一个词:欧洲。

标签: java javascript playframework playframework-2.2


【解决方案1】:

通常您会在 GET 返回的 HTML 页面中返回 userId。 userId 可以在页面中作为 Javascript 或 HTML。或者在 cookie 中返回,javascript 可以获取 cookie。

尽管有许多潜在的安全问题。您将如何信任在未来请求中返回的 userId?

【讨论】:

  • 谢谢,这是我认为我必须处理的问题。我并不特别关心这里的安全性,因为 authToken 和 userId 在每笔交易中都会根据身份验证表进行检查。身份验证令牌的 TTL 相当短,所以我认为没有什么好担心的。
猜你喜欢
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 2014-04-04
  • 2014-01-16
  • 1970-01-01
相关资源
最近更新 更多