【发布时间】:2014-04-29 07:06:15
【问题描述】:
我有一个 Play Framework 2.2.2 版应用程序。这很简单。我正在扩展Security.Authenticator 来处理我的请求身份验证。
我正在(通过请求,GET 或 POST)传递域上另一个应用程序生成的授权令牌。这个令牌在数据库中查找,最终会为用户返回 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.Authenticator的Secured类在我的GET数据中查找authToken。 - 该值用于对userId进行反向查找。 -Secured类public 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