我需要一些帮助来保护单页多租户saas应用程序。
问题: 1)实施它的最佳方法是什么?我正在尝试使用angularjs,spring mvc和REST构建应用程序。 2)可以使用Spring Security完成吗?有关创建登录页面和保护REST的任何示例,调用都会有帮助吗?
我找到了一个用Spring JPA(http://krams915.blogspot.com/2012/01/spring-security-31-implement_3065.html)实现Spring安全性的示例,但它不适用于SPA和SaaS。
我理解这是一个非常广泛的问题,但我是SPA,REST和SaaS的新手,所以任何指针都会有所帮助。
...谢谢
答案 0 :(得分:0)
我已经参与了两个有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的情况下,它将是非常复杂的任务)。在服务器端,您必须在:
之间进行选择我更喜欢第二种(服务上的安全商业方法)。我认为它更方便,因为通常我们需要安全的业务操作,而不是某些端点。作为adwantage,您将能够通过其他协议公开您的业务逻辑,并且安全性已经存在。从另一方面,我可以想象一些业务需求对不同的端点/协议具有不同的权限。所以这更多地取决于你的实际情况。
Lage size JS应用程序必须拆分为模块。为了减少直接依赖性,最好使用直接调用的事件来模块之间进行通信。 Addy Osmany有一些有趣的想法,关于如何在这些编纂中做到安全。我没有找到很好的链接,也许this或this会有所帮助(搜索“权限”)。
随意发布任何问题。祝你好运。