我有一个 Play Framework 版本 2.2.2 应用程序。这相当简单。我正在扩展 Security.Authenticator
来处理我的请求身份验证。
我正在传入(通过请求,GET
或 POST
)域中另一个应用程序生成的授权 token 。该 token 会在数据库中查找,并最终返回用户的 userId
(而不是像 Play 演示中那样的字符串 userName
。
我想做的是将 userId
附加到 GET 中,以便我可以使用 Javascript 提取参数,因为我当前拥有的所有 JS 代码都依赖于 userId
,而不是身份验证 token 。
有什么办法可以做到这一点,还是我试图以错误的方式解决这个问题?我需要避免使用 cookie,除非不可能。
谢谢!
编辑
这是我打算逐步分解的事情:
- 前端 JS 通过浏览器的 GET 请求向 Play 应用程序发出请求(例如 http://mycompany.com/playapp/home?authToken=5hgys7Sgh2u4iblahblah )
- 请求包含一个
authToken
参数,用于在用户身份验证数据库表中查找 - Play
Security.Authenticator
在请求到达其预期 Controller 之前拦截请求(假设 Controller 是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 的情况下执行此操作,但现在看来不太可能,我想得越多......
更新:
所以我最终做的是在 session 上从 Secured.java 内部设置我的 userId
,如下所示:
ctx.session().put("userId", userId);
然后,通过使用注释进行身份验证的任何方法,我都会从 session 中检索 userId
,如下所示:
Integer userId = Integer.parseInt(ctx().session().get("uid"));
然后,我将 userId
传递到我的页面模板,并将其插入到 Javascript 变量中。就像魅力一样,不需要 cookies 。
最佳答案
通常您会在 GET 返回的 HTML 页面中返回 userId。 userId 可以以 Javascript 或 HTML 形式出现在页面中。或者以cookie的形式返回,javascript就可以获取到cookie。
但存在许多潜在的安全问题。您如何信任在将来的请求中返回的 userId?
关于java - 将 GET 参数添加到 Play Framework 2.2 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22566817/