Apache Shiro 与 Spring Security

Posted

技术标签:

【中文标题】Apache Shiro 与 Spring Security【英文标题】:Apache Shiro versus Spring Security 【发布时间】:2016-12-17 09:08:44 【问题描述】:

我们有一个使用 Shiro 的现有 Jetty 应用程序,我们正在迁移到 Spring Boot,并且想知道哪个更直接地与我们的 Spring 应用程序、Apache Shiro 或 Spring Security 集成?我们正在考虑尽快实现 OAuth2,我们推荐使用 Spring Security,因为我们将其移至 Spring Boot。有没有人可以给我们任何意见?

【问题讨论】:

【参考方案1】:

因为您已经将 Apache Shiro 作为您的安全框架。让它保持原样是明智的。 Shiro 很容易与 spring 集成并与 OAuth2 (https://github.com/zhangkaitao/shiro-example/blob/master/shiro-example-chapter17-client/src/main/java/com/github/zhangkaitao/shiro/chapter18/oauth2/OAuth2Realm.java) 一起使用。如果您切换到 Spring Security,您将不得不重新考虑所有内容和大型变更集。

【讨论】:

【参考方案2】:

如果您有一个相当小的应用程序,没有太多用户和角色,并且不需要使用任何过于高级的功能,请随意使用 Java EE Security。它为此提供了坚实的基础。不过,Java EE 安全性的可能性很快就耗尽了。例如,您可以只为整个应用程序指定一种身份验证机制。此外,如果应用程序需要可移植,则绝对应该使用其他两个框架之一。

现在,如果需要一个很大程度上独立、轻量级和可扩展的安全解决方案,Apache Shiro 是不二之选。然而,缺点是可能需要一些时间来克服问题。人们可能还必须自己实现一些功能。然而,Shiro 的设计(界面驱动和基于 POJO)促进了这一点。

最后,如果应用程序已经是基于 Spring 的,还不如留在火车上使用 Spring Security,在这种情况下没有任何真正的缺点(除了 Spring Security 有点难以实现)。这对于没有弹簧的应用程序来说是不同的,如果以前从未使用过 Spring 则更是如此。高级功能的实现一开始更加困难,除非包含 Spring 本身或 AspectJ,否则无法使用注释。此外,如果需要 Spring OAuth2,则必须使用 spring-mvc 而不是 Jersey 或 RESTeasy 来创建 REST 资源。

到此,我们的比较就结束了。再次提醒我们观察的相对性。自行试验这些框架,并使用最适合您需求的框架。

【讨论】:

以上是关于Apache Shiro 与 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章

Apache shiro的简单介绍与使用(与spring整合使用)

web应用安全框架选型:Spring Security与Apache Shiro

将 apache Shiro 与 Spring MVC 非 xml 项目一起使用

与 Spring Security/Apache Shiro 相比,JAAS 的缺点是啥?

Apache Shiro 与 Spring MVC AuthorizingRealm @Autowired java.lang.NullPointerException

Spring 上的 Apache Shiro 会话管理