首页 > 其他分享 >【SpringSecurity】Spring Security 和Shiro对比

【SpringSecurity】Spring Security 和Shiro对比

时间:2023-12-06 10:06:10浏览次数:32  
标签:Spring 用户 认证 授权 Security Shiro


1、概述

Spring Security 的前身是 Acegi Security,在被收纳为Spring子项目后正式更名为Spring Security。

Spring Security是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富;

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的实际标准;

Spring Security是一个框架,致力于为Java应用程序提供身份验证和授权。与所有Spring项目一样,Spring Security的真正强大之处在于可以轻松扩展以满足自定义要求。

在 Java 生态中,目前有 Spring Security 和 Apache Shiro 两个安全框架,可以完成认证和授权的功能。

我们先来学习下 Spring Security 。其官方对自己介绍如下:

Spring Security is a powerful and highly customizable authentication and 
access-control framework. 
It is the de-facto standard for securing Spring-based applications.

Spring Security is a framework that focuses on providing both authentication 
and authorization to Java applications. Like all Spring projects, 
the real power of Spring Security is found in how easily it can be extended 
to meet custom requirements

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。
它是保护基于Spring的应用程序的事实标准。

Spring Security是一个专注于为 Java 应用程序提供身份验证和授权的框架。
像所有 Spring 项目一样,Spring Security的真正威力在于它可以轻松扩展以满足自定义需求。

一般Web应用的需要进行认证和授权。

认证(Authentication):验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户

授权(Authorization):经过认证后判断当前用户是否有权限进行某个操作

而认证和授权就是SpringSecurity作为安全框架的核心功能。

2、Spring Security、Apache Shiro 选择问题

2.1、Shiro

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

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

  1. 易于理解的 Java Security API;
  2. 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
  3. 对角色的简单的签权(访问控制),支持细粒度的签权;
  4. 支持一级缓存,以提升应用程序的性能;
  5. 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
  6. 异构客户端会话访问;
  7. 非常简单的加密 API;
  8. 不跟任何的框架或者容器捆绑,可以独立运行。

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

【SpringSecurity】Spring Security 和Shiro对比_spring

四大核心功能介绍:

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

Shiro架构

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

  1. Subject:主体,可以看到主体可以是任何可以与应用交互的 用户;
  2. SecurityManager:相当于 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher;是 Shiro 的心脏;所有具体的交互都通过 SecurityManager 进行控制;它管理着所有 Subject、且负责进行认证和授权、及会话、缓存的管理。
  3. 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一般流程为:

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

标签:Spring,用户,认证,授权,Security,Shiro
From: https://blog.51cto.com/u_15680317/8699732

相关文章

  • 【转】SpringBoot实现策略模式
    文章来源:微信公众号《Java极客技术》 ,作者:鸭血粉丝Tang  1.普通代码实现在介绍SpringBoot中如何实现策略设计模式之前,我们先简单的回顾一下策略模式的设计思路。以编写一个简单的程序计算器,代码如下!首先,我们定义一个Operation接口,用于逻辑的计算publicint......
  • 一、Spring学习 : 容器---->BeanFactory+ApplicationContext 的多种容器实现
    BeanFactory实现的特点我们来着重讲一下DefaultListableBeanFactory这个实现类:点击查看完整代码packagecom.itvayne.springbootcloudstudy.beanfactory01;importcom.sun.org.slf4j.internal.Logger;importcom.sun.org.slf4j.internal.LoggerFactory;importorg.springf......
  • sping_boot学习系列-搭建springboot项目工程
    搭建springboot工程方式一.通过idea SpringInitializr搭建详细步骤:1.创建一个新项目File->New->Project...2.项目环境配置选择SpringInitializr(20231205:注最低版本是jdk17,若搭建jdk8版本的,可先搭建jdk17版本的,修改pom.xml文件)默认即可,可修改项目名称选择maven......
  • springboot @PostConstruct无效的解决
    springboot@PostConstruct无效的解决问题描述:在使用SpringBoot框架时,通过@PostConstruct注解修饰的方法可能会出现无法执行的情况。解决过程:1.确认依赖首先,我们需要确认在项目中是否引入了正确的依赖。在pom.xml文件中,需要引入spring-boot-starter-web包,这个包中含......
  • Springmvc随手笔记
    0报错问题1tomcat运行中IDEA异常关闭解决方法:重启电脑tomcat运行中IDEA异常关闭,再次启动tomcat会报告端口占用,打开任务管理器关闭一个java.exetomcat可以正常启动但是debug任然提示端口被占用Errorrunning'Tomcat8.0.50-springmvc':Unabletoopendebuggerport......
  • springboot整合redis
    spring:redis:port:6379host:192.168.88.101password:111111lettuce:pool:max-active:8max-wait:-1msdatabase:0yml配置(单机版)spring:redis:password:111111lettuce:cluster:refr......
  • 基于SpringBoot实现文件的上传下载
    (一)概述文件上传下载一直都是一个系统最常用也是最基本的功能点,刚好最近公司的项目上有用到这个功能,于是自己就用SpringBoot也写了一个简化的版本,已实现文件的上传和下载功能。(二)创建项目首先创建一个SpringBoot的项目,接着引入相关的依赖,因为涉及到数据库的操作,所以依赖会比较......
  • Spring Cache
    SpringCache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。SpringCache提供了一层抽象,底层可以切换不同的缓存实现,例如:EHCacheCaffeineRedis(常用)起步依赖:<dependency><groupId>org.springframework.boot</groupId><art......
  • 计算机毕业设计springcloud vue商城源码
    开发环境及工具:大等于jdk1.8,大于mysql5.5,idea(eclipse),nodejs,vscode(webstorm)技术说明:springcloudspringbootmybatisvueelementui代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。功能介绍:用户端:登录注册首页显示搜索商品,轮播图,商品分类,点击分类展示对应商,(......
  • springboot实现文件的上传下载
    SpringBoot提供了简单易用的方式来处理文件上传和下载功能。下面是一个简单的示例:创建一个文件上传的控制器@RestControllerpublicclassFileUploadController{privatestaticfinalLoggerlogger=LoggerFactory.getLogger(FileUploadController.class);@PostMap......