spring|安全管理框架,用Shiro还是用Spring Security?

spring|安全管理框架,用Shiro还是用Spring Security?


开发Java应用项目的时候 , 安全管理通常来讲是必不可少的功能 。 常用的安全管理框架有Apache Shiro和Spring Security , 那么作为一名开发人员的话 , 该如何选择自己的权限管理框架呢?
首先我们来看一看两者的区别 。
Apache Shiro是一个强大且易用的Java安全框架能够非常清晰的处理认证、授权、管理会话以及密码加密等功能 。 他的API也非常易于理解的API , 因此 , 对于初学者来说 , 非常容易上手 。
它的特点包括:
· 易于理解的 Java Security API;
· 简单的身份认证(登录) , 支持多种数据源(LDAP , JDBC , Kerberos , ActiveDirectory等);
· 对角色的简单的签权(访问控制) , 支持细粒度的签权;
· 支持一级缓存 , 以提升应用程序的性能;
· 内置的基于 POJO 企业会话管理 , 适用于 Web 以及非 Web 的环境;
· 异构客户端会话访问;
· 非常简单地加密 API;
· 不跟任何的框架或者容器捆绑 , 可以独立运行 。
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架 。 它提供了一组可以在Spring应用上下文中配置的Bean , 充分利用了Spring IoC(控制反转) , DI( 依赖注入)和AOP(面向切面编程)功能 , 为应用系统提供声明式的安全访问控制功能 , 减少了为企业系统安全控制编写大量重复代码的工作 。 它与Spring MVC能够很好地集成 , 并配备了流行的安全算法实现捆绑在一起 。 Spring Security在我们进行用户认证以及授予权限的时候 , 通过各种各样的拦截器来控制权限的访问 , 从而实现安全 。
从功能上来讲 , shiro能实现的 , Spring Security 基本都能实现 , 依赖于Spring体系 , 但是好处是Spring全家桶的亲儿子 , 集成上更加契合 , 在使用上 , 比shiro略负责 。 但是Shiro比Spring Security更容易使用 , 也就是实现上简单一些 , 同时基本的授权认证Shiro也基本够用 。
从社区活跃度来说 , Spring Security社区支持度更高 , Spring社区的亲儿子 , 支持力度和更新维护上有优势 。 相比之下Shiro的支持度就差了一点 , 但是依然还是有很多开发者在为Shiro做出贡献 。
而Shiro 功能强大、简单、灵活 。 不跟任何的框架或者容器绑定 , 可以独立运行 。 因此对于非Spring的项目 , Shiro兼容性更高一些 。
因此 , 从比较上来讲 , 两者的区别不是很大 。 使用的时候 , 如果开发框架全部采用Spring全家桶的话 , 那么用Spring Security会比较合适一些 。 而对于刚开始接触安全管理框架或者是不用Spring全家桶的话 , 用Shiro比较好一些 。
但是 , 同时我们也应该注意到 , Shiro和Spring Security都已经诞生了十几年了 , 随着技术的演进发展 , 其基本框架也产生了一定局限性 , 尤其是对于前后端分离的框架来说 , 需要多做很多兼容性的工作 。
在这种情况下 , 新的Java权限管理框架Sa-Token就应运而生了 。

Sa-Token 是一个轻量级 Java 权限认证框架 , 主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题 。
Sa-Token 的 API 设计非常简单 , 以登录认证为例 , 只需要两行代码就可以完成了:
// 在登录时写入当前会话的账号id
StpUtil.login(10001);
// 然后在需要校验登录处调用以下方法:
// 如果当前会话未登录 , 这句代码会抛出 `NotLoginException` 异常