首页
学习
活动
专区
工具
TVP
发布

Shiro vs.
EN

Stack Overflow用户
提问于 2011-02-14 18:30:08
回答 2查看 43.9K关注 0票数 132

我目前正在评估基于Java的安全框架,我是Spring3.0的用户,所以看起来SpringSecurity将是正确的选择,但Spring安全似乎受到了过度复杂的影响,它看起来并没有让安全更容易实现,Shiro似乎更连贯,更容易理解。我正在寻找这两个框架之间的利弊列表。

EN

回答 2

Stack Overflow用户

发布于 2011-02-14 22:16:03

我没有使用Shiro的经验,我“部分”同意你关于Spring Security的说法。在Spring Security3.x之前,Spring Security (或Acegi)的设置非常痛苦。一个简单的基于角色的配置至少需要140行神秘的XML配置...我之所以知道这一点,是因为我实际上是自己数行的。这是您设置了一次的东西,您祈祷它将永远工作,而不会再次接触配置,因为您可以保证您已经忘记了所有配置的含义。:)

在Spring Security 3.x中,它得到了极大的改进。它引入了security命名空间,极大地缩短了配置,从140行减少到大约30行。下面是我的一个项目的Spring Security 3.x示例:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:security="http://www.springframework.org/schema/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">

    <security:http auto-config="true">
        <security:form-login login-page="/index.do" authentication-failure-url="/index.do?login_error=1" default-target-url="/index.do"
            always-use-default-target="true" />
        <security:logout logout-success-url="/index.do" />
        <security:intercept-url pattern="/secure/**" access="ROLE_ADMIN,ROLE_USER" />
        <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    </security:http>

    <bean id="customAuthenticationProvider" class="my.project.CustomAuthenticationProviderImpl">
        ...
    </bean>

    <security:authentication-manager>
        <security:authentication-provider ref="customAuthenticationProvider" />
    </security:authentication-manager>

</beans>

Spring Security3.x的美妙之处在于它具有极强的可配置性,这导致了它的一个主要缺点:太复杂,难以理解。文档也不容易阅读,因为我对Spring Security使用的一些术语只是部分熟悉。但是,如果您需要创建自定义配置或控制您希望的安全粒度,则可以使用这些选项。或者,您可以坚持使用上述< 30行代码来执行基于角色的安全检查。

我真正喜欢Spring Security的地方是,一旦设置好了,安全性就会无缝地集成到项目中。这就好像实际的项目代码不知道安全性的存在……这很好,因为它允许我在将来轻松地分离或升级安全组件(例如,将数据库身份验证更改为LDAP/CAS身份验证)。

票数 32
EN

Stack Overflow用户

发布于 2013-09-11 00:54:45

我使用Spring Security (3.1版)已经有几个月了,我对它非常满意。它真的很强大,有一些非常好的特性,特别是在像我以前一样手工实现所有东西之后!然而,就像我在某处读到的那样,在开发应用程序的时候,你只需设置一次,然后祈祷它能一直工作到最后,因为如果你必须去修复它,你可能已经忘记了你必须参数的大部分东西。

但随后出现了一个新项目,具有更复杂的安全需求。简而言之,我们必须在几个相关的we应用程序之间实现某种自定义的SSO。

我确切地知道我想要在HTTP逻辑、cookie、会话id等方面实现什么,以及应该以什么顺序发生什么,但是我花了大半天的时间与Spring Security API作斗争,仍然不能确切地确定我应该实现或覆盖哪个类或接口,以及如何将它们插入上下文中。整个API感觉真的很复杂,有时还有点深奥。虽然该文档对于一般用例甚至一些定制都很好,但它并没有深入到满足我的需求。

在阅读了这里和网络上其他一些地方的答案后,我得到的印象是Shiro会更容易理解并根据我的需求进行定制。所以我试了试。

我很高兴我做到了,因为经过一天的工作,我设法了解了足够多的API,不仅可以在我的Spring webapp中毫不费力地设置基本的身份验证和授权系统,还可以实现我正在寻找的自定义SSO行为。我只需要扩展2到3个类,在我的spring上下文中,整个过程只需要25行XML配置。

所以总而言之,在易用性和学习曲线方面,Shiro真的很讨人喜欢,我认为我可能会在未来使用它,除非我遇到一些缺少的功能或其他问题(我到目前为止还没有)。

两者都很强大,但Shiro更容易学习。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4991084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档