现在我想将一些Ember.js和Angular.js代码添加到访问Spring RESTful Web服务(只返回JSON数据)的HTML页面中.
如何将用户登录身份验证绑定到RESTful Web服务的身份验证?换句话说,我想这样做只有在用户登录后才能访问RESTful Web服务.这样,Angular.js和Ember.js库就可以从我的用户页面安全地访问这些RESTful Web服务没有其他人能够直接打电话给他们.
我在另一篇文章中读到,Spring Security从未打算用于完整的Ajax框架,这是真的吗?我希望事实并非如此.我想现在这种类型的东西必须非常普遍,因为有很多AJAX客户端框架基于访问JSON / RESTful API而工作.
如果要在Spring Security工作的现有Web应用程序中使用EmberJS或AngularJS,如果只是将JavaScript库添加到项目中,则不应该遇到太多问题.这是因为一旦您的用户通过身份验证,任何正常的HTTP请求都将被视为已通过身份验证,因为浏览器将确保使用Cookie或URL参数来回传递会话信息(如果适用).您可以看到我的working examples on Github之一用于Spring Security和EmberJS集成.
您可能需要担心的唯一问题是使用AJAX进行表单提交的CSRF令牌.最新的Spring Security文档有一小部分专门用于此,因此您不应该面临太多问题.但是,我想澄清一下,这个特定问题并非特定于Spring Security. CSRF保护通常涉及在每个HTTP POST请求中包含安全的,随机生成的令牌.挑战源于使现有的JavaScript库了解此令牌以及如何将其包含在HTTP POST请求中.这在任何应用程序中都是一个挑战,而不仅仅是使用Spring Security的应用程序.
但是,如果您将使用无状态客户端(例如移动设备),则无法依赖在HTTP会话中存储用户凭据的默认Spring Security机制,因为HTTP请求将不具有将它们绑定到会话的信息.这也不是特定于Spring或Spring Security应用程序,因为约束是由客户端的性质和客户端 – 服务器通信而不是任何服务器端技术强加的.在这种情况下,您需要在应用程序的HTTP标头中传递一些身份验证令牌,以维护服务器端的安全状态.我有一个working example for this as well.如果您需要更多详细信息,网上有一些文章解释了如何使用Spring Security执行此类操作.