19

您在 Java 项目中使用什么安全框架?

我使用了 Spring Security 和 Apache Shiro,它们看起来都很不成熟。

Spring 安全漏洞:

  1. 没有对权限的原生支持;
  2. 无法在 Java 代码中显式使用(有时是必要的);
  3. 过于关注经典(非 AJAX)Web 应用程序。

Apache Shiro 缺陷:

  1. 最终版本中的错误(例如 Spring 集成的问题);
  2. 不支持 OpenID 和其他一些广泛使用的技术;
  3. 报告的性能问题。

两者都缺乏文档。

也许大多数真正的项目都开发了自己的安全框架?

4

4 回答 4

16

至于 Apache Shiro:

我不确定你为什么列出你所做的事情:

  1. 毫无疑问,世界上的每个项目都有发布错误。然而,这里的关键是 Shiro 的团队反应迅速并尽快修复它们。这不是评估框架的东西,否则您将消除每个框架,包括您自己编写的任何框架。
  2. OpenID 支持将很快在 Shiro 1.2 中发布 - 也许一个月后?
  3. 什么性能问题?从来没有人向开发列表报告过性能问题,特别是因为 Shiro 中的缓存支持广泛且一流。没有澄清或参考,这就是 FUD。
  4. 现在的文档实际上非常好——我最近看到的一些最好的开源文档(它在 2 周前重新工作)。你有具体的例子说明它对你来说不足吗?

我很乐意提供帮助,但您的担忧是参考资料或具体示例不支持的概括。也许您可以代表您的项目需要的具体事情,但到目前为止您还没有完成?

Apache Shiro 仍然是最灵活、最容易理解的 Java 和 JVM 语言安全框架——我怀疑你会找到更好的。

但是,最重要的是,我真诚地表示这一点,请不要编写自己的安全框架,除非您打算在其中投入大量时间。我见过的几乎每家试图自己做这件事的公司都惨遭失败。很难做到“正确”(和安全)。相信我 - 在写了 8 年之后,这是我绝对确定的一件事 :)

Anyway, feel free to join the Shiro user list and you're sure to find that the community is happy and willing to work through whatever issues you may have. You'll find that we take care of the people that ask questions and do our best to help out.

HTH!

于 2011-06-05T19:24:53.470 回答
3

我当前的项目使用 SpringSecurity 并涉及到您声称是 SpringSecurity 中的缺陷的所有三件事:

  • 这些项目实现了超越简单角色的细粒度访问规则,并以各种方式涉及域对象的状态、额外的请求参数等。这些是使用在我的 MVC 控制器中调用的自定义“访问策略对象”实现的。但是,访问检查失败会通过抛出相关异常返回给 SpringSecurity。(这些可以作为标准 SpringSecurity 方法级拦截器实现,但检查通常涉及检查域对象。)

  • 这些项目同时支持 Web 和 AJAX 访问,并针对这两种情况以不同的方式处理访问失败。这是通过为 SpringSecurity 编写一些自定义身份验证入口点组件来完成的,这些组件根据请求 URL 等在不同的身份验证行为之间进行选择。

换句话说,它可以做到...

话虽如此,我同意你的几点:

  • 把这种东西连接起来并不容易。在使用<http>元素及其关联的配置器时,我一直遇到障碍。就像...您希望它使用不同版本的组件 X。但要做到这一点,您还必须替换 Y、Z、P 和 Q。

  • 文档非常稀少,如果您尝试做一些与众不同的事情,则没有帮助。

于 2011-06-05T00:59:50.623 回答
1

Andrey, I think this answer comes too late to be helpful to you; it is intended for those who land on this thread later and I hope it helps.

My company recently released as open source, OACC, an advanced Java Application Security Framework. OACC is designed for systems that require up to object-level security granularity.

OACC provides a high performance API that provides permission based authorization services. In a nutshell, OACC allows your application to enforce security by answering the question: Is entity ‘A’ allowed to perform action ‘p’ on entity ‘B’?

One of the key abstractions in OACC is a resource. A resource serves as the placeholder in OACC for the object in the application domain that needs to be secured. Both the actors (e.g. users, processes) and the objects being secured (e.g. documents, servers) are represented as resources in OACC. The application domain objects that are actors, or are secured, simply store the resource id to the associated resource.

The resource abstraction allows OACC, unlike other major security frameworks, to provide a rich API that manages permissions between resources. OACC persists security relationships in RDBMS tables (DB2, Oracle, MS-SQLServer and PostgreSQL are currently supported).

For more information please check out the project website: http://oaccframework.org

于 2015-04-01T05:30:47.270 回答
-2

我们在其中一个项目中使用了分层安全性。图层如下:

  1. HTTPS 作为协议 (Apache-AJCConnectors-TomcatServlets)
  2. 仅在客户端和 servlet 之间传输二进制对象
  3. 传递对象中的单个元素(无论哪种方式)都被加密
  4. 加密密钥是动态的,在初始握手期间设置,对 1 个会话有效

从概念上讲,安全性包括加密密钥、加密算法和应用它的数据。我们确保在通信期间不会同时传递 3 个以上的 1 个。希望有帮助。问候, - 女士

于 2011-06-04T23:19:49.383 回答