如果你还不了解shiro或security,建议查看如下文章:
安全框架shiro的基础知识_陈海龙的格物之路-CSDN博客通过阅读这篇文章,你可以了解到shiro是什么、shiro的架构、shiro如何支持web环境的安全验证等。https://blog.csdn.net/chl87783255/article/details/120434130SpringSecurity-设计思想_陈海龙的格物之路-CSDN博客系统安全可分为身份认证和授权验证两个部分,spring security提供了这两种能力,本文讲述security的设计思路。https://blog.csdn.net/chl87783255/article/details/120272688
目标
shiro和spring-security都是安全框架,两者有哪些相同点和差异呢?结合自己的了解,在多个维度进行了对比。
使用场景差异
- security 仅支持web场景
- shiro 支持web和非web场景
与spring关系差异
- security 属于spring且是spring提供的一个能力
- shiro 属于apache,与spring无关,可与spring整合
均提供扩展性
- 如何获取用户信息、如何获取权限信息等都可自定义
web场景对比
实现原理有相似之处
- security filter (aop)
- shiro filter (aop)
- 责任链
request合法性校验差异
- shiro仅针对url path进行检查,拒绝分号、反斜杆、非ascii码字符
- security针对header、url path、param等进行检查
防止攻击的能力差异
- shiro 没有提供
- security 针对常见攻击提供支持
身份认证
- 均支持,支持自定义login-url,开发者仅需提供获取当事人的方式、密码处理方式
- 均有提供身份认证成功后置处理扩展点
- shiro没有提供csrfToken
授权验证
均支持配置形式
均支持配置形式,但是只适合角色\权限较少的系统。
在SpringBean的方法上使用授权验证的注解
- shiro支持(RequiresPermissions\RequiresRoles)
- security支持(Prexxx\Postxxx)
硬编码方式
- shiro支持,直接调用subjectAPI。
- security未提供API,但开发者可自己实现(获取userDetails,验证权限)
统一进行url授权验证
- 均为提供现成实现
- security 可自定义访问控制管理器和投票者
- shiro没有提供扩展,需要自己写filter或interceptor,其中使用subjectAPI。
支持权限粒度差异
- security,支持url粒度、方法粒度、数据粒度。
- shiro,支持url粒度、方法粒度、数据粒度。
选型
一切从系统出发:是否使用spring,是否web系统,是否为controller方法维度的权限粒度,是否需要防止网络攻击?