首页 > 其他分享 >Spring Security系列教程-初识Spring Security

Spring Security系列教程-初识Spring Security

时间:2023-04-10 14:05:25浏览次数:40  
标签:框架 Spring 安全 初识 Apache Security Shiro

Spring Security系列教程-初识Spring Security_Apache


前言

在开始学习Spring Security系列教程之前,小千先带大家来了解一下Spring Security,看看它到底是什么,有哪些功能,有什么特点,以及它与别的同类框架相比,有什么不同,我们以后学习任何一个新技术,其实都可以遵循"3W1H"法则,这样学习起来才能更有条理。

一. Spring Security概念

首先请各位跟着 小千****来了解一下 Spring Security的概念,我们得先知道要学习的是个什么东西,以后我们出去面试的时候,面试官可能会问你, "请你介绍一下Spring Security" ,那么答案其实就是这个概念了。

Spring Security是一个功能强大且高度可定制的,主要负责为Java程序提供声明式的 身份验证和访问控制 的安全框架。其前身是Acegi Security,后来被收纳为Spring的一个子项目,并更名为了Spring Security。

Spring Security的底层主要是 基于 Spring AOP 和 Servlet 过滤器 来实现安全控制,它提供了全面的安全解决方案,同时授权粒度可以在 Web请求级和方法调用级 来处理身份确认和授权。

二. Spring Security功能

接下来我们必须掌握Spring Security的核心功能有哪些,就是它能够做什么。

Spring Security 的核心功能主要包括如下几个:

  • 认证: ****解决 "你是谁" 的问题-->解决的是系统中是否有这个“用户”(用户/设备/系统)的问题,也就是我们常说的“登录”。
  • 授权: ****权限控制/鉴别,解决的是系统中某个用户能够访问哪些资源,即“你能干什么”的问题。Spring Security 支持基于 URL 的请求授权、方法访问授权、对象访问授权
  • 防护攻击: 防止身份伪造等各种攻击手段。
  • 加密功能: 对密码进行加密、匹配等。
  • 会话功能: 对Session进行管理。
  • RememberMe功能: 实现“记住我”功能,并可以实现token令牌持久化。
  • ......

三. Spring Security支持的身份认证模式

在Spring Security中,我们除了掌握几个核心功能之外,对于其身份认证模式简单了解一下即可。

在身份验证层面,Spring Security广泛支持各种身份认证模式。这些验证模式绝大多数都是由第三方提供,或相关标准组织提供的,目前Spring Security支持如下认证技术:

  • HTTP BASIC authentication headers: 一个基于IEFT RFC的标准。
  • HTTP Digest authentication headers: 一个基于IETF RFC的标准。
  • HTTP X.509 client certificate exchange: 一个基于IETF RFC的标准。
  • LDAP: 一种常见的跨平台身份验证方式。
  • Form-based authentication: 用于简单的用户界面需求。
  • OpenID authentication: 一种去中心化的身份认证方式。
  • Authentication based on pre-established request headers: 类似于 Computer Associates
  • SiteMinder,一种用户身份验证及授权的集中式安全基础方案。
  • Jasig Central Authentication Service: 单点登录方案。
  • Transparent authentication context propagation for Remote Method Invocation (RMI) and HttpInvoker: 一个Spring远程调用协议。
  • Automatic "remember-me" authentication: 允许在指定到期时间前自行重新登录系统。
  • Anonymous authentication: 允许匿名用户使用特定的身份安全访问资源。
  • Run-as authentication: 允许在一个会话中变换用户身份的机制。
  • Java Authentication and Authorization Service:  JAAS,Java验证和授权API.
  • Java EE container authentication: 允许系统继续使用容器管理这种身份验证方式。
  • Kerberos: 一种使用对称密钥机制,允许客户端与服务器相互确认身份的认证协议。
  • ......

四. Shiro框架简介

如果各位之前有过Java项目的开发经验,应该了解使用过另一个比较有名气的安全框架,就是Shiro。

1. Shiro起源

在Java安全领域,除了Spring Security,还有一个更久远的Shiro框架。Shiro是Apache下的一个开源安全框架,提供了身份验证、授权、密码学和会话管理等关于安全的核心功能。它的前身是 JSecurity,2004 年,Les Hazlewood 和 Jeremy Haile 创办了 Jsecurity。当时他们找不到适用于应用程序级别的合适 Java 安全框架,同时又对 JAAS 非常失望,于是就搞了Shiro这个框架。

2004 年到 2008 年期间,JSecurity 托管在 SourceForge 上,贡献者包括 Peter Ledbrook、Alan Ditzel 和 Tim Veil。

2008 年,JSecurity 项目贡献给了 Apache 软件基金会(ASF),并被接纳成为 Apache Incubator 项目,由导师管理,目标是成为一个顶级 Apache 项目。期间,Jsecurity 曾短暂更名为 Ki,随后因商标问题被社区更名为“Shiro”。随后项目持续在 Apache Incubator 中孵化,并增加了贡献者 KalleKorhonen。

2010 年 7 月,Shiro 社区发布了 1.0 版,随后社区创建了其项目管理委员会,并选举 Les Hazlewood 为主席。2010 年 9 月 22 日,Shrio 成为 Apache 软件基金会的顶级项目(TLP)。

2. Shiro功能

Apache Shiro 也是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。 Apache Shiro 的首要目标是易于使用和理解,因为安全有时候是很复杂的,甚至是痛苦的,但其实没必要这样。框架应该尽可能掩盖复杂的地方,暴露一个干净而直观的 API,来简化开发人员在应用程序安全上所花费的时间。

Apache Shiro 是一个拥有许多功能的综合性的安全框架,下图表展示了 Shiro 的核心功能:

Spring Security系列教程-初识Spring Security_安全框架_02

Shiro 中有四大核心功能——身份验证,授权,会话管理和加密。

  1. Authentication:简称为“登录”,这是一个证明用户是谁的行为。
  2. Authorization:访问控制的过程,也就是决定“谁”可以去访问“什么”。
  3. Session Management  管理用户特定的会话,即使在非 Web 或 EJB 应用程序。
  4. Cryptography:通过使用加密算法保持数据安全同时易于使用。

除此之外,Shiro 也提供了额外的功能,来解决在不同环境下所面临的安全问题,尤其是以下这些:

  1. Web Support: web 支持的 API 能够轻松地保护 Web 应用程序。
  2. Caching:缓存是用来确保操作的快速而又高效的。
  3. Concurrency:Apache Shiro 利用它的并发特性来支持多线程应用程序。
  4. Testing:测试功能来帮助编写单元测试和集成测试。
  5. Run As:一个允许用户 以 另一个用户身份(如果允许) 运行的功能,有时候在管理脚本时很有用。
  6. Remember Me:在会话中记住用户的身份,这样用户只需要在强制登录时登录。

3. Shiro特点

Shiro 框架具有 直观、易用 等特性,同时也能提供了 健壮的安全性,虽然它的功能不如 Spring Security 那么强大,但是在常规的企业级应用中,其实也够用了。

当然在本系列教程中,我们主要是先学习Spring Security,对于Shiro的内容,请各位多关注我,我以后会再推出关于Shiro的系列教程。

五. Spring Security 与 Shiro对比

在上一小节中,我给各位说到,在Java安全领域中,目前常用的安全框架,就是Spring Security与Shiro,那么我们来对比一下两者各自的特点,这也是我们出去面试时,面试官常问的一个点: "请说一下Spring Security与Shiro的区别"。

1. Spring Security优点

  • Spring Security基于Spring开发,所以Spring Security与Spring更契合;
  • Spring Security功能比Shiro更加强大,尤其是在安全防护方面;
  • Spring Security社区资源比Shiro更加丰富;
  • Spring Boot/Spring Cloud环境中,更容易集成Spring Security;
  • Spring Security 具备良好的扩展性,可以满足自定义的要求;
  • Spring Security对 OAuth2框架支持很好,而Shiro则对 OAuth2 支持不够。

2. Spring Security缺点

  • Shiro是一个轻量、简单、易于集成的老牌安全框架,而且使用流程简单清晰;反观Spring Security,则属于是重量级、配置繁琐、学习使用门槛高的安全框架。
  • Shiro依赖性低,不需要任何框架和容器,可以独立运行,而Spring Security需要依赖Spring容器。

3. 现在常见的安全技术栈

在目前的Java体系中,我们在进行关于安全方面的开发时,到底该选择Shiro还是Spring Security哪个框架呢?其实我们可以进行如下搭配:

  • SSM + Shiro
  • Spring Boot/Spring Cloud + Spring Security

就目前而言,Shiro 最大的问题在于和 Spring 家族的产品进行整合时较为不便。在 Spring Boot 推出的很长一段时间里,Shiro 都没有提供相应的 starter,后来虽然有一个 shiro-spring-boot-web-starter 出来,但配置并没有简化多少。所以在 Spring Boot/Spring Cloud 技术栈的微服务项目中,Shiro 几乎不存在优势。

但如果你是进行传统的 SSM 项目开发,而不是微服务项目,那么无疑使用 Shiro 是最方便省事的,因为它足够简单,足够轻量级。

通过本篇教程,相信只要你认真查看,就可以跟着小千了解掌握了Spring Security的概念功能,这些虽然是理论知识,我们也应该有所掌握。很多程序员之所以面试会失败,或者拿不到满意的高薪,就是只会使用某个技能,但是对该技能说不出个"一二三"来,我们必须丰富自己的理论水平,才能让面试官更认可我们,你认为呢?

标签:框架,Spring,安全,初识,Apache,Security,Shiro
From: https://blog.51cto.com/u_15739596/6180644

相关文章

  • 【Spring MVC】第一个程序
    添加Maven依赖:<!--spring核心类--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.8.RELEASE</version></dependency>&......
  • MIT 6.5840 2023 Spring(6.824)LAB1:MapReduce
    MIT6.58402023Spring(6.824)LAB1:MapReduce前言本次lab主要是完成一个基于RPC远程调用的单机单文件系统的简单MapReduce框架,并完成单词计数任务。基于golang实现,单Master,多Worker。实现worker的奔溃恢复(FaultTorrance),通过超时重新执行实现。主要的任务有,RPC调用参数及返回参数......
  • SpringBoot处理get请求的路径参数
    当请求方式为get并且使用路径参数的时候,请求格式形如: 后端controller中可以用实体类接收参数,并且不用添加任何注解,当然这个实体类是中的属性是有getter和setter方法的才行,接受方式形如:实体类形如: SpringBoot会自动做处理,将路径参数中的值填充到实体类对应的属性中......
  • Spring
    1.springboot的自动装配原理springboot启动以后:通过@EnableAutoConigration里的@lmport(AutoConfigurationlmportSelector.class)实现配置类的导入,但是并不是传统意义上的单个导入,而是批量进行导入AutoConfigurationlmportSelector类实现了ImpotSelector接口,重写了selectlmport......
  • springboot 打包后的端口 jar and war
    WAR包发布项目:端口号是目标发布服务器tomcat的默认端口号(8080)或在tomcat的配置文件(server.xml)中设置的端口号。JAR包发布项目:端口号是application.yml或application.properties里配置的端口号,也就是这些文件配置了内嵌服务器tomcat的端口号。默认端口号也是8080。......
  • 【Spring】事务管理
    添加Maven依赖:<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.6</version><scope>runtime</scope></dependency>......
  • MQTT(EMQX) - SpringBoot 整合MQTT 连接池 Demo - 附源代码 + 在线客服聊天架构图
    MQTT(EMQX)-LinuxCentOSDocker安装MQTT概述MQTT(MessageQueueTelemetryTransport)是一个轻量级传输协议,它被设计用于轻量级的发布/订阅式消息传输,MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化。是一种简单、稳定、开放、轻量级易于实现的消息协议,在物联网......
  • SpringBoot整合RocketMQ,老鸟们都是这么玩的!
    今天我们来讨论如何在项目开发中优雅地使用RocketMQ。本文分为三部分,第一部分实现SpringBoot与RocketMQ的整合,第二部分解决在使用RocketMQ过程中可能遇到的一些问题并解决他们,第三部分介绍如何封装RocketMQ以便更好地使用。1.SpringBoot整合RocketMQ在SpringBoot中集成RocketMQ......
  • SpringMVC中使用引入jquery不能加载页面
    今天在学习springMVC的json数据绑定时,需要使用到jquery发送ajax请求。但是当我通过是<script>标签引入了jquery.js。但是当我访问该jsp的时候就是不显示页面的内容我一直以为时SpringMVC的servelt拦截器拦截了静态资源,但是我过滤了静态资源还是不显示。后来才发现,我把<script......
  • 优化Spring MVC消息转换器实现精度和时间转换
    重写ObjectMapper/***对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象*将JSON解析为Java对象的过程称为[从JSON反序列化Java对象]*从Java对象生成JSON的过程称为[序列化Java对象到JSON]*/publicclassJacksonObjectMapperextendsObjectMapper{......