angularjs客户端和spring后端用户登录和会话管理

Posted

技术标签:

【中文标题】angularjs客户端和spring后端用户登录和会话管理【英文标题】:angularjs client and spring backend user login and session management 【发布时间】:2016-08-21 23:51:01 【问题描述】:

我有一个用 angularjs 编写的移动网站,我的后端是 Spring Boot。现在,我有自己的登录页面,可以毫无问题地登录用户。但是,如果用户曾经单击“返回”、“刷新”等,客户端会丢失用户的 id 和登录信息(登录时从服务器获取)。我需要确保此信息得到维护,并且单击“返回”或“刷新”不会破坏一切。

其次,登录后知道 url 的用户可以在浏览器中键入这些 url 并在不登录的情况下访问它们。我可以阻止他们访问服务器上的任何内容,但不确定我可以在客户端上做什么来重定向它们在这种情况下是登录页面。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

您应该记住,在浏览器中运行的所有内容都是stateless,没有办法跟踪之前的状态。

现在,如果用户执行刷新(或其他类似操作),Angular 会丢失所有内容(包括 AuthData)。

你有很多方法可以解决这个限制:

    在应用程序启动后执行 http 请求(查看angular.module().run 方法 保存一个cookie并使用服务器通过json直接在dom上打印初始数据层 保存在本地/会话存储中

就我个人而言,我更喜欢 cookie,因为它可以让服务器与客户端分离。

【讨论】:

对于cookies,浏览器是否允许cookies会有问题吗?如果是,我该如何克服它们? 如果浏览器(也就是用户)不允许使用 cookie,你就不能使用 cookie... 总是显示登录表单。【参考方案2】:

参考您的评论...“如果用户点击“返回”、“刷新”等,客户端会丢失用户的 ID 和登录信息(登录时从服务器获取)。”

您是否有任何理由需要在成功验证后维护用户 ID 或登录信息?

如果 Spring Security 设置为基本身份验证,则在成功登录后,将在响应中将会话 Cookie 发送回客户端。在对服务器的所有后续请求中,将在请求中发送相同的会话 Cookie,并且将重新建立先前经过身份验证的会话。您只需要确保您的 Angular 客户端在发出请求时传递 cookie。

看看这个sample是如何做到的。

【讨论】:

是的,我需要维护他们的用户 ID,因为它是用于对服务器的后续请求的标识符(这是一个聊天应用程序)。

以上是关于angularjs客户端和spring后端用户登录和会话管理的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 和 Spring MVC 安全性

AngularJS/ Spring Boot 应用程序 - 空闲时间后自动导航到登录页面

AngularJS + Jersey RESTful 后端:身份验证和授权

如何使用angularjs登录到spring security

Spring REST服务,注册用户,认证

如何在 Grails 和 AngularJS 上使用 Spring Security 进行 Ajax 登录