Shiro和Spring Security的简单对比

Shiro和Spring Security是Java中常用的两种安全认证框架,安全认证主要包括认证授权鉴权两部分。
认证指应用程序验证一个用户信息的过程,应用程序需要确认当前的用户是否是合法的用户,用户会向应用程序提供两部分数据:身份信息和凭据,当凭据匹配应用程序记录的当前身份信息对应的凭据时,认为是合法用户。
授权鉴权指访问控制,即控制用户对应用程序中资源的访问。通常通过角色与权限来控制访问。先赋予用户以对应的角色与权限,再在访问资源时对用户的角色与权限进行检查,根据检查结果决定是否能够访问。

shiro

shiro是Apache下的一个安全认证框架
shiro将日常安全认证的功能抽取出来形成独立的模块,它的主要架构如下图:
Shiro和Spring Security的简单对比_第1张图片
subject主体指当前与应用程序交互的对象,这个对象可以是用户,也可以是任何一个与应用程序交互的抽象概念。在shiro中,我们可以在需要的地方获取当前subject对象,通过操作subject对象完成认证和授权鉴权。
securityManager安全管理器是所有功能的执行者,它管理着所有的subject。我们操作subject对象时,实际上是由安全管理器来执行的。
realm是shiro与连接安全数据的连接器,可以认为是针对安全数据的DAO。当安全管理器需要认证或者授权时,通过realm获取对应的信息,完成认证和授权。
在使用shiro时,我们需要先配置realm,准备好安全数据,再配置securityManager关联realm。之后就可以在需要的地方获取当前的subject对象,调用相关方法完成认证和授权鉴权。

spring security

spring security是spring生态链中的一款安全认证框架
spring security的实现主要依赖于spring提供的DelegatingFilterProxy,DelegatingFilterProxy允许将spring中注入的bean加入到servlet容器的过滤链中
Shiro和Spring Security的简单对比_第2张图片
spring security基于spring,通过向spring中注入各种过滤器bean完成对用户的认证和授权鉴权,当请求触发对应的过滤器时,执行对应的逻辑,当认证或鉴权失败时,由对应的异常处理器处理。此外,spring security通过UserDetailService来获取安全数据。
在使用spring整合spring security时,我们主要关注各个关键过滤器和异常处理器的配置,例如过滤的规则、未认证、认证失败、鉴权失败等,同时构建UserDetailService实现类提供安全数据,基本的安全认证功能即可生效。


shiro与spring security最大的区别是shiro为一个独立的模块,使用灵活,但会造成侵入式的设计;而spring security依赖于spring的过滤器代理机制,与spring绑定,不够灵活,但不是侵入式的。此外,shiro与spring security都支持密码加密,shiro支持会话管理,spring security提供对常见漏洞的保护(例如CSRF)

你可能感兴趣的:(spring,java)