高级Java安全框架

时间:2011-06-04 19:50:23

标签: java security spring-security shiro

您在Java项目中使用了哪些安全框架?

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

Spring Security缺陷:

  1. 没有对权限的本机支持;
  2. 无法在Java代码中显式使用(有时是必要的);
  3. 过分关注经典(非AJAX)Web应用程序。
  4. Apache Shiro缺陷:

    1. 最终版本中的错误(就像Spring集成的问题一样);
    2. 不支持OpenID和其他一些广泛使用的技术;
    3. 报告的性能问题。
    4. 两者都缺乏文档。

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

4 个答案:

答案 0 :(得分:16)

至于Apache Shiro:

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

  1. 世界上的每个项目都有发布错误,毫无疑问。然而,最重要的是Shiro的团队响应迅速,并尽快修复它们。这不是评估框架的东西,否则你会消除每个框架,包括你自己编写的任何框架。
  2. OpenID支持将很快在Shiro 1.2中发布 - 也许一个月了?
  3. 有什么性能问题?没有人向开发列表报告性能问题,特别是因为Shiro中的缓存支持是广泛的和一流的。如果没有说明或参考,这就是FUD。
  4. 现在的文档实际上非常好 - 我最近看过的一些最好的开源软件(它在2周前重新开始工作)。你有具体的例子说明它不适合你吗?
  5. 我很乐意提供帮助,但您的担忧是引用或具体示例不支持的概括。也许你可以代表你迄今为止未能完成的项目需要的具体事情?

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

    但是,最重要的是,我的意思是诚意,请不要编写自己的安全框架,除非您计划将荒谬的时间放入它。几乎我见过的所有试图做到这一点的公司都失败了。 真的难以'正确'(并且安全)。相信我 - 写了8年之后,这是我绝对肯定的一件事:)

    无论如何,随时加入Shiro用户列表,您一定会发现社区很高兴并愿意解决您可能遇到的任何问题。你会发现我们会照顾那些提出问题的人,并尽力帮助他们。

    HTH!

答案 1 :(得分:3)

我目前的项目使用SpringSecurity并涉及做你认为在SpringSecurity中存在漏洞的所有三件事:

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

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

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

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

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

  • 文档非常稀疏,如果您尝试做一些与众不同的事情,则无济于事。

答案 2 :(得分:1)

安德烈,我认为这个答案来得太晚,对你没有帮助;它适用于那些稍后登陆这个帖子的人,我希望它有所帮助。

我的公司最近以开放源代码OACC发布了一个高级Java应用程序安全框架。 OACC专为需要高达对象级安全粒度的系统而设计。

OACC提供高性能API,提供基于权限的授权服务。简而言之,OACC允许您的应用程序通过回答以下问题来强制执行安全性:实体'A'是否允许对实体'B'执行操作'p'?

OACC中的一个关键抽象是资源资源用作OACC中占位符,用于需要保护的应用程序域中的对象。参与者(例如用户,进程)和被保护的对象(例如文档,服务器)都被表示为OACC中的资源。作为actor或受保护的应用程序域对象只是将资源ID存储到关联的资源。

与其他主要安全框架不同,资源抽象允许OACC提供丰富的API来管理资源之间的权限。 OACC在RDBMS表中保持安全关系(目前支持DB2,Oracle,MS-SQLServer和PostgreSQL)。

有关详细信息,请查看项目网站:http://oaccframework.org

答案 3 :(得分:-2)

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

  1. HTTPS作为协议(Apache-AJCConnectors-TomcatServlets)
  2. 仅在客户端和servlet之间传输二进制对象
  3. 传递的对象中的各个元素(任一方式)都是加密的
  4. 加密密钥是动态的,在初始握手期间设置,有效期为1个会话
  5. 从概念上讲,安全性包括加密密钥,加密算法和应用它的数据。我们确保在通信期间不会同时传递3个中的1个以上。希望有所帮助。问候, - M.S.