当前位置: 首页 > 面试题库 >

JSF中“记住我”的Cookies

商畅
2023-03-14
问题内容

我有一个登录页面,我想添加“记住我”功能;因此,如果用户注销并再次打开页面,则会加载其用户名和密码。为此,当用户登录(并选中“记住我”)时,我保存了以下cookie:

FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie userCookie = new Cookie("vtusername", username);
userCookie.setMaxAge(3600);
((HttpServletResponse) facesContext.getExternalContext()
       .getResponse()).addCookie(userCookie);
Cookie passCokie = new Cookie("vtpassword", password);
passCokie.setMaxAge(3600);
 ((HttpServletResponse) facesContext.getExternalContext()
       .getResponse()).addCookie(passCokie);

问题是稍后(在同一会话中)我阅读了cookie,然后看到maxAge = -1; 即使我将其设置为3600
…为什么呢?另一个问题:如果我使用userCookie.setSecure(true)将cookie设置为安全,那么我将无法读取它(它消失了)。

另一个问题:由于密码存储在cookie中,我应该如何对其进行加密?最佳做法是什么?

提前致谢


问题答案:

问题是稍后(在同一会话中)我阅读了cookie,然后看到maxAge = -1; 即使我将其设置为3600 …为什么呢?

因为浏览器不会发送回最大值。它仅将cookie名称=值发送回。最大值仅存储在浏览器中。您可以在Web浏览器本身的cookie查看器/编辑器中进行检查。例如,在Firefox中,您可以通过
工具 >选项>隐私>删除单个cookie_来检查所有 _cookie 。输入域(例如localhost)以查看cookie。

另一个问题:如果我使用userCookie.setSecure(true)将cookie设置为安全,那么我将无法读取它(它消失了)。

仅当请求/响应是通过HTTPS而不是HTTP服务时,它才起作用。同样,当请求已经通过HTTPS进行服务时,它将默认为secure = true。

另一个问题:由于密码存储在cookie中,我应该如何对其进行加密? 最佳做法是什么?

不要将原始名称/密码存储在两个cookie中。除此之外,这可以轻松地放入一个cookie中,这是一个非常糟糕的主意,并且很容易被黑客入侵。使用具有自动生成的长,唯一且无法猜测的值的单个cookie。将此值与用户ID一起存储在服务器端的数据库中。当有人使用此cookie访问您的网站,但用户尚未登录(即User会话中没有对象)时,您可以执行自动登录。



 类似资料:
  • 问题内容: 我正在尝试实现“记住我” /“自动登录”功能。我已经在客户端存储了一个cookie,但是什么时候应该阅读它?例如,如果尝试在过滤器中执行此操作,则将无法访问用于访问数据库的应用程序范围的bean。 最佳做法是什么? 问题答案: 这在某种程度上取决于您当前的登录名是如何工作的。是容器登录后跟自定义内容(例如在会话中放置一些对象)还是仅自定义? 在第一种情况下,您无法在JSF中完全自动登录

  • 8.2 节实现的登录系统自成一体且功能完整,不过大多数网站还会提供一种功能——用户关闭浏览器后仍能记住用户的会话。本节,我们首先实现自动记住用户会话的功能,只有用户明确退出后会话才会失效。8.4.5 节实现另一种常用方式:提供一个“记住我”复选框,让用户选择是否记住会话。这两种方式都很专业,GitHub 和 Bitbucket 等网站使用第一种,Facebook 和 Twitter 等网站使用第二

  • 我正在和Spring Boot一起开发一个集成了LDAP的应用程序。我能够成功地连接到LDAP服务器并验证用户。现在,我需要添加“记住我”功能。我试图通过不同的职位(这),但无法找到我的问题的答案。官方的Spring安全文件指出 如果您正在使用不使用UserDetailsService的身份验证提供程序(例如,LDAP提供程序),那么它将不起作用,除非您的应用程序上下文中也有UserDetails

  • 问题内容: 我正在寻找一种更好的方法来解决我的问题。我在登录表单上记得我的功能。用户单击“记住我”框,“我的API”向我发送令牌。 我的问题是,当用户返回我的网站时,存储此令牌并再次对其进行身份验证的最佳方法是什么? 我以为 创建一个Cookie并在其中存储令牌。 创建本地存储。 请给我任何可能对我有帮助的建议。 问题答案: 我将document.cookie与这样的工厂代码一起使用: 创建一个c

  • 我有一个启用了Spring安全的项目。我已经使用运行良好的登录表单实现了记住我。但是我在登录表单上也有来自google/facebook的社交登录,它们运行良好。问题是他们不记得用户。有没有办法设置类似的“记住我”功能? 正常登录页面的当前spring配置:

  • 在实现应用程序登录时,我想使用Spring Security设置谁登录,但如何设置记住?我的用户名是这样的。 用户详细信息us详情userDetails.loadUserByUsername(u.getAccount()); Authentication认证=new UsernamePasswordAuthenticationToken( us详情,usDetails.getPassword(),