java - 在我的 gwt/osgi Web 应用程序中实现授权和身份验证的首选方法是什么?

标签 java authentication gwt authorization osgi

我正在使用 gwt 和 osgi (equinox) 开发一个 Web 应用程序。 该应用程序正在 jetty 上运行。

现在我需要进行一些身份验证(简单的用户名/密码登录和 oauth) 以及一些授权(例如,检查特定 java 对象的访问权限,我不需要对 url 模式进行访问控制)。 我还希望能够保存用户首选项并存储用户评论。

我已经看过(包括从教程中下载和测试演示应用程序)

但我仍然不确定哪种方法更好。 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/

相关文章:

php - Ion Auth (Codeigniter) 中的元表?

gwt - GWT CellTable 中的单元格颜色

java - 在 Java 中使用 Map 时 containsKey 到底是如何工作的?

java - 时间反向传播

java - Socket和ServerSocket有什么区别?

security - 使用 nonce 的电子邮件中激活/注册/密码重置链接的最佳做法是什么

Java:在 JPanel 上调用 repaint() 时,同一 JFrame 中的组件会在左上角重新绘制自己

python - 使用 python 和 urllib2 如何在阅读源代码之前对网页进行身份验证

java - Jsoup 无法与 GWT 一起使用

java - 在 GWT JSONP 请求中指定 "Accept:" header 参数