App Engine上的Apache Shiro - 记住我不工作

时间:2014-07-31 00:06:08

标签: google-app-engine cookies shiro remember-me

此时我完全不知道Shiro“rememberMe”服务应该如何运作。

我正在使用Shiro和我的应用程序,该应用程序托管在Google App Engine上。

我在 appengine-web.xml 文件中将会话启用设置为 TRUE

我可以看到登录我的应用程序时创建的“rememberMe”cookie。 关闭浏览器并重新打开后,我还可以找到Cookie(在Chrome>设置> Cookie中)。 所以cookie显然就在那里。

我的登录代码基本上如下使用基于表单的登录...

    UsernamePasswordToken token = new UsernamePasswordToken( email, password );
    token.setRememberMe(true); 
    theSubject.login(token);

如果身份验证成功,我会查询用户对象。

问题是当我关闭浏览器并重新访问该网站时,调用: SecurityUtils.getSubject()。isRemembered() 总是“假的”。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

似乎我总是在发布后总结出事情。 :)

问题是“rememberMe”cookie的大小。 我让Shiro将整个User对象序列化为cookie。

经过大量搜索,我发现虽然确实会设置cookie,但如果cookie太大(大于4K),浏览器将忽略它并且不会在响应中发送它。

我现在改变了事情,只是在cookie中序列化用户密钥(作为Web安全字符串)。然后,我可以在每个请求上访问密钥。

另一个改变......

用户登录后,我在会话中设置用户以便于检索。 显然这不是最好的做法。

我现在只在会话中设置用户密钥。

我现在可以从cookie或会话(登录后)访问用户密钥,并在需要时查询用户(及相关数据)。

如果有人有其他建议或更好的想法,请随时发布。 我总是愿意学习。 :)