我正在使用 gwt 和 osgi (equinox) 开发一个 Web 应用程序。 该应用程序正在 jetty 上运行。
现在我需要进行一些身份验证(简单的用户名/密码登录和 oauth) 以及一些授权(例如,检查特定 java 对象的访问权限,我不需要对 url 模式进行访问控制)。 我还希望能够保存用户首选项并存储用户评论。
我已经看过(包括从教程中下载和测试演示应用程序)
- Apache Shiro
- Spring Security
- 如何制定自己的解决方案(例如使用 Scribe 进行 OAuth)
但我仍然不确定哪种方法更好。 Spring 看起来相当复杂,并且可能会产生很大的开销。 Shiro 无法执行 OAuth(我可以使用 Scribe 添加 OAuth 吗?)。 使用这些框架我真正能赢得什么?它们与 gwt 和 osgi 的配合情况如何?
最佳答案
我已经测试了 Spring Security 和 Shiro。老实说我两个都不喜欢。前段时间我们在 Apache Karaf 邮件列表上讨论了如何进行基于角色的访问控制。他们都以自己专有的方式 reshape 了安全性。
我首先自己提出了 Shiro,但经过几次测试后,它对于非网络使用来说并不是太有吸引力。我们还因为 Spring Security 的复杂性和 spring 依赖性而放弃了它。最后我们决定使用普通的 JAAS。
所以基本上你有某种身份验证来执行 JAAS 登录,然后使用登录的用户和以下代码进行授权:
AccessControlContext acc = AccessController.getContext();
Subject subject = Subject.getSubject(acc);
Set<Principal> principals = subject.getPrincipals();
这允许您创建一个非常基于标准的身份验证/授权系统,同时无需引入额外的库。
基于此,David Bosschaert 为 OSGi 服务创建了基于角色的访问控制: http://coderthoughts.blogspot.fr/2013/10/jmx-role-based-access-control-for-karaf.html
我不确定您是否可以直接使用 karaf 实现,但它可能会给您一些如何创建自己的系统的想法。从长远来看,我希望安全库停止重新发明 Java 安全性,而是使用 jaas 作为其核心,但不知道这是否真的会发生。
关于java - 在我的 gwt/osgi Web 应用程序中实现授权和身份验证的首选方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21138115/