Spring Security 与 Shiro 区别

1.Spring Security、Apache Shiro

1.1、Shiro
​ 首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。

Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:

易于理解的 Java Security API;

简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);

对角色的简单的签权(访问控制),支持细粒度的签权;

支持一级缓存,以提升应用程序的性能;

内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;

异构客户端会话访问;

非常简单的加密 API;

不跟任何的框架或者容器捆绑,可以独立运行。

Shiro四大核心功能:Authentication,Authorization,Cryptography,Session Management

四大核心功能介绍:

Authentication:身份认证/登录,验证用户是不是拥有相应的身份;
Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
Shiro架构

Shiro三个核心组件:Subject, SecurityManager 和 Realms.

Subject:主体,可以看到主体可以是任何可以与应用交互的 用户;
SecurityManager:相当于 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher;是 Shiro 的心脏;所有具体的交互都通过 SecurityManager 进行控制;它管理着所有 Subject、且负责进行认证和授权、及会话、缓存的管理。
Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。
2.1.1、shiro的优点
shiro的代码更易于阅读,且使用更加简单;
shiro可以用于非web环境,不跟任何框架或容器绑定,独立运行;
2.1.2、shiro的缺点
授权第三方登录需要手动实现;
2.2、Spring Security
​ 除了不能脱离Spring,shiro的功能它都有。而且Spring Security对Oauth、OpenID也有支持,Shiro则需要自己手动实现。Spring Security的权限细粒度更高,毕竟Spring Security是Spring家族的。

Spring Security一般流程为:

当用户登录时,前端将用户输入的用户名、密码信息传输到后台,后台用一个类对象将其封装起来,通常使用的是UsernamePasswordAuthenticationToken这个类。
程序负责验证这个类对象。验证方法是调用Service根据username从数据库中取用户信息到实体类的实例中,比较两者的密码,如果密码正确就成功登陆,同时把包含着用户的用户名、密码、所具有的权限等信息的类对象放到SecurityContextHolder(安全上下文容器,类似Session)中去。
用户访问一个资源的时候,首先判断是否是受限资源。如果是的话还要判断当前是否未登录,没有的话就跳到登录页面。
如果用户已经登录,访问一个受限资源的时候,程序要根据url去数据库中取出该资源所对应的所有可以访问的角色,然后拿着当前用户的所有角色一一对比,判断用户是否可以访问(这里就是和权限相关)。
2.2.1、spring-security的优点
spring-security对spring整合较好,使用起来更加方便;
有更强大的spring社区进行支持;
支持第三方的 oauth 授权,官方网站:spring-security-oauth

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring SecurityShiro 都是Java中常用的权限管理和安全性框架,它们都提供了一套强大的解决方案来处理用户认证、授权和会话管理等任务。但两者在设计理念、API风格以及集成机制上存在一些差异: 1. **Spring Security**: - **设计哲学**:Spring SecuritySpring框架的一部分,设计理念更倾向于模块化和扩展性,它的API设计直观,且与Spring框架高度集成。 - **使用场景**:适用于大型企业级应用,特别是那些已经基于Spring Boot构建的应用,它能无缝集成到Spring MVC、WebFlux等Spring框架中。 - **资源管理**:Spring Security内置了强大的资源访问控制,如Web Security Configuration等,可以方便地管理REST API、表单登录等场景。 2. **Apache Shiro**: - **设计目标**:Shiro的设计目标更偏向于轻量级,提供基础的权限管理和身份验证,适合小型或已有成熟架构的项目。 - **API风格**:API相对简洁,但可能需要更多的自定义配置来满足特定需求。 - **使用场景**:适用于对性能敏感的小型应用,或者需要更多灵活性(如支持多种身份验证机制)的情况,例如单页应用或移动应用。 **区别**: - Spring Security功能更全面,包括对OAuth、JWT等现代认证方式的支持;而Shiro在这方面可能需要额外的插件或库。 - Spring SecuritySpring依赖性较强,对于非Spring框架的项目,使用起来可能会稍微复杂一些。 - Shiro的学习曲线相对平缓,但配置可能需要更多的代码量。 **相关问题--:** 1. Spring Security在哪些方面优于Shiro? 2. Shiro如何处理轻量级权限管理? 3. 对于初学者来说,选择哪个框架更适合入门?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值