我已经参与了SPA和安全方面的两个项目。最后一个是GWT + Spring Security。我相信你可以一起使用Angular和Spring Security。
不幸的是,Spring Security AFAIK没有内置的配置参数'我们处于SPA模式'。因此,Spring Security方面的一些调整/配置将是必要的。示例: 想象一下,在登录期间,您将调用内置到Spring Security登录控制器中。在成功验证的情况下,默认情况下,用户将被重定向到索引页面,在失败的情况下,它将被重定向到相应的错误页面。对于标准Web应用程序来说,这对于SPA Web应用程序来说并不那么有用。在SPA的情况下,您需要检测AJAX调用并打印带成功案例的用户名/角色的JSON,或发送401代码失败(然后在JS中检测401并显示相应的错误)。您可以使用Spring Security的相应扩展点来执行此操作:AuthenticationSuccessHandler
和AuthenticationFailureHandler
。
有些另一件事来调整:在默认情况下后会话过期的用户将被重定向到登录页面(和SPA应用程序接收登录页上到下一个AJAX调用的响应)。
展望我的个人经验一般指南将如下所示:登录后将角色列表加载到JS中。用它在UI端显示/隐藏相应的组件。 也在服务器端应用相同的限制列表。为了确保用户不在浏览器中编辑JS(尽管在某些中等大小的应用程序缩小了JS的情况下,它将会非常复杂)。在服务器端,你必须选择之间:
- 安全网址的AJAX调用
- 安全上的一些Java方法。
我更喜欢第二个(服务上的安全业务方法)。我认为它更方便,因为我们通常希望获得安全的业务操作,而不是某些端点。作为优势,您将能够通过其他协议公开您的业务逻辑,并且安全性已经存在。从另一方面,我可以想象一些业务需求对不同的端点/协议拥有不同的权限。所以这取决于你的实际情况。
Lage size JS应用程序必须拆分成模块。为了减少直接的依赖关系,最好使用直接调用的事件在模块之间进行通信。有关Addy Osmany关于如何在这些文件中进行安全性的有趣想法。我没有找到它的好链接,也许this或this将是有益的(搜索“权限”)。
随时发布任何问题。祝你好运。