您在Java项目中使用了哪些安全框架?
我使用的是Spring Security和Apache Shiro,它们看起来都不成熟。
Spring Security缺陷:
Apache Shiro缺陷:
两者都缺乏文档。
也许大多数真正的项目都会开发自己的安全框架?
答案 0 :(得分:16)
至于Apache Shiro:
我不确定你为什么列出你所做的事情:
我很乐意提供帮助,但您的担忧是引用或具体示例不支持的概括。也许你可以代表你迄今为止未能完成的项目需要的具体事情?
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)
我们在其中一个项目中使用分层安全性。图层如下:
从概念上讲,安全性包括加密密钥,加密算法和应用它的数据。我们确保在通信期间不会同时传递3个中的1个以上。希望有所帮助。问候, - M.S.