我有一个Play Framework 2.2.2版应用程序。这很简单。我正在扩展Security.Authenticator
以处理我的请求身份验证。
我正在(通过请求,GET
或POST
)传递域上其他应用生成的授权令牌。在数据库中查找此令牌,最终将返回用户的userId
(而不是播放演示中的字符串userName
。
我想做的是将userId
附加到GET,以便我可以使用Javascript提取参数,因为我目前所有的JS代码都依赖于userId
,而不是身份验证令牌。
有没有办法实现这一目标,还是我试图以错误的方式解决这个问题?我需要避免使用cookie,除非它不可能。
谢谢!
修改
以下是我打算逐步分解的内容:
authToken
参数,用于在用户身份验证数据库表中查找Security.Authenticator
拦截请求,然后将其发送到目标控制器(让我们说控制器是Application.java
)
- 扩展Secured
的{{1}}类会在Security.Authenticator
数据中查找authToken
。
- 该值用于对GET
进行反向查找。
- 重写userId
类Secured
以将userId作为字符串返回(例如public String getUsername(Http.Context ctx)
)。现在我想做的是修改网址以在其上附加userId(例如http://mycompany.com/playapp/home?authToken=5hgys7Sgh2u4iblahblah & userId = 1234 )
我不完全确定这是可能的......但是说它足够了,我需要通过浏览器发出请求,进行身份验证,然后,在成功请求后,让javascript知道{ {1}}是。我想在没有设置cookie的情况下这样做,但现在似乎不太可能,我想的就越多......
更新
所以我最终做的是在会话中从我的Secured.java中设置我的"1234"
,如下所示:
userId
然后,从使用注释验证的任何方法,我从会话中检索userId
,如下所示:
ctx.session().put("userId", userId);
然后我将userId
传递给我的页面模板,并将其插入到Javascript变量中。像魅力一样,不需要饼干。
答案 0 :(得分:1)
通常,您会在GET返回的HTML页面中返回userId。 userId可以作为Javascript或HTML在页面中。或者在cookie中返回,javascript可以获取cookie。
但许多潜在的安全问题。您将如何信任userId在未来的请求中回来?