7.0Spring Boot2.5安全机制与 API 身份验证实战|学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 快速学习7.0Spring Boot2.5安全机制与 API 身份验证实战。

开发者学堂课程【Spring Boot 2.5.x 开发实战7.0Spring Boot2.5安全机制与 API 身份验证实战】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/853/detail/14072


7.0Spring Boot2.5安全机制与 API 身份验证实战

 

内容介绍:

一、本节课程介绍

二、Java Spring Boot 2.5安全机制

三、Java 面试题

 

一、本节课程介绍

在 Spring Boot 中实现了安全机制,Spring Boot 可以对接各种不同的安全框架,也可以自定义实现比较原始的安全机制。

本节课会模拟一个简单的 rest API 项目,然后对其启用身份验证。这里可以进行扩展,对接 MySQL 数据库甚至 Redis 缓存来实现整个用户的注册和身份验证整个过程。(大型项目,例如淘宝、微信或者新浪微博,其身份验证在 Release 中进行,因为用户规模大,并且信息在分布式缓存中进行保存)后面可以扩展到 Release 身份验证机制,把身份验证与 Release 和 MySQL 结合起来,实现一个完整的项目。

 

二、Java Spring Boot 2.5安全机制

1.Java Spring Boot 2.0安全机制

(1)自定义实现安全验证

(2)Apache Shiro 开源框架

(3)Spring Security 开源框架

4)大量使用 AOP

(5)依赖注入思想

(6)灵活扩展

Spring Boot提供的安全机制,可以用Spring Security 开源框架,也可以用 Apache Shiro 开源框架,还可以用自定义实现安全验证。

web 开发底层本质上是 web 请求进入 web 框架,请求可以拦截。也可以叫 AOP 编程,做拦截和身份校验的工作(拦截可以进行授权)。

Spring Boot 作为快速开发框架,其底层有 web 开发的接口(可以做 API 应用等等)

2.Java Spring Boot 2.5安全机制

可以进行授权,定了一些角色,设置对应的权限,这里支持的方式很多。Spring Boot 作为快速开发框架,底层有 Web 开发的接口,可以做网站、 API 应用、定时任务应用等等。

目前应用程序身份验证的类型非常多,不仅有基于网页的 Form 表单验证,也有 Basic 等等(如下图)

图片9.png

还有企业级身份验证,比如基于企业局域网的客户身份验证,组织内部使用的身份验证。还有跨第三方平台的开放式身份验证体系等。

3. 安全漏洞

注意:基于 Spring Boot 开发尽量用较新版本,最好是Spring Boot2.3以上的版本,不要用太老的版本。Spring Boot 2020年9月份又修复了一批安全漏洞,涉及到远程代码过程执行的安全漏洞问题。

总结:

(1) Spring Boot 2020年9月份修复漏洞

(2) Spring Boot Actuator 未授权访问远程代码执行漏洞

(3)紧急修复 Spring Framework 版本包含一个安全漏洞( CVE-

2020-5421)的修复程序。此漏洞可以通过 sessionld 绕过 RFD  (反射型文件下载)保护

(4)Spring Boot 2018 年修复了一些安全漏洞

(5)建议使用最新的Spring 5.0+版本

(6)Spring框架升级5.0.o - 5.0.2

(7)Spring框架升级4.3.0 - 4.3.13

(8)Spring Boot 1.5.10

4. Java Spring Security

安全框架本身相对成熟,可以集成 Spring Security,也可以集成Spring MVC ,也可以集成 Spring Boot ,也可以集成 Spring cloud。

保护 Spring 应用系统的安全标准,可以实施各种产同的身份验证,可以做各种数据源进行集成,定制开发工作,包括基于角色、基于令牌都可以实现。这种多种身份验证机制的支持,包括扩展 URL 、自定义路由规则,这种方法的验证都可以进行实现。这种框架方便构建安全体系,不会限制应用程序的类型。整个集成和 Spring 应用平台集成最好。

总结:

(1)Spring Security 功能强大且高度可自定义的安全框架。

(2)保护 spring 应用系统的安全标准。

3Spring Security 专注于身份验证和授权。

(4)容易地扩展、自定义开发

(5)前身是 Acegi Security ,

(6)提供安全认证服务的框架。

(7)Spring Security 为基于 J2EE 企业应用提供了全面安全机制。

(8)Authentication 验证和 Authorization 授权

(9)抵御会话攻击,点击劫持,CSRF 跨站请求伪造。

该框架方便构建自己的安全体系,不会限制应用程序的类型。

5.Java 安全框架 Shiro

Apache 官网有一个开源的项目叫 Apache Shiro,是一个开源的安全管理,支持的工作非常强大,唯一的差别是不属于 Spring  官方。但是很好用,有很多项目包括 Spring Boot,甚至  Spring Cloud都在使用 Apache Shiro 。对接不同的数据源,两个都可以,取决于个人倾向,两个都非常完善,正常情况下,如果希望技术上简单一点,可以直接使用一整套 SpringJava 安全框架

Shiro 总结:

(1)Apache Shiro 简单易用的开源 Java 安全框架

(2)轻松实现身份验证、授权、加密和会话管理。

(3)使用 Shiro 可以快速实现系统安全。

(4)Shiro 其前身是J security 项目

(5)Shiro 可以轻易实现 Java 网站安全验证

(6)可应用于 Web 环境,非 Web 环境

(7)支持多种数据源 MySQL 等

(8)如 LDAP,JDBC,Kerberos,ActiveDirectory 等

6. Spring Security Demo

加一个入门的 spring-boot-starter- security 依赖,然后拉取必要的安全组件。

<dependencies>

<dependency>

<groupld>org.springframework.boot</groupld>

<artifactld>spring-boot-starter- security</artifactld>

</dependency>

</dependencies>

7.WebSecurityConfig

(1Spring Security 的配置类

(2)WebSecurityConfig

(3)可以配置安全规则

(4)默认启用 basic 验证

(5)#Spring Security 可以在配置文件中关闭

(6) security.basic.enabled = false

在早期版本中可以自行选择开放及关闭安全认证,现版本默认启用。可以直接设置Spring Security配置文件注入必要安全配置规则,例如某路由规则、针对主页等,甚至加入角色限制。

Web 全站安全验证配置

下面这段代码,是 Web 全站安全验证配置的例子,针对 anyRequest

定制时,所有的请求都做身份验证。 hasRole 表示针对当前的请求

访问某个地址,或者所有的请求访问时是否具备某个角色这个角色或者权限的验证,需要定制扩展接口),比如连数据库或者连缓存,实现角色查询,需要有校验。

@Configuration

@Order(SecurityProperties.BASIC_AUTH_ORDER: 10)

public class ApplicationConfigurerAdapter extendsWebSecurityConfigurerAdapter {

@Override

protected void configure(HttpSecurity http) throws Exception

{

http.antMatcher(" /admin/**")

.authorizeRequests()

.antMatchers("/admin/users").hasRole(“usersAdmin")

.antMatchers("/admin/orders").hasRole( "ordersAdmin")

.anyRequest().isAuthenticated();

}

}

8.重新实现验证机制 

有一般规则,就有特殊规则,允许自定义扩展底层的 API 实现自定义的判断逻辑,这是良好的安全框架所具备的功能。

重新实现验证机制:

• WebSecurityConfig 安全配置类;

• UserDetailsService 接口。

实践案例演示: 

这个程序是之前的 Web 网站,看一下项目的依赖,通过文件依赖可以看出,相比之前的项目,如果数据库依然存在,还是用之前的spring data jpa ,加入 MySQL 的数据库的链接。

图片8.png

稍微注意一下,这里面有个 starter security,加完以后,可以看一下左边的依赖包的安全组件,有包括 spring security config 、spring security core、spring security web 等。

图片7.png

代码具体的配置和实现:

新版本默认已经集成,现在最主要的要有 Web 安全配置,全局配置的时候使用内存验证,实际可以对接数据库、对接缓存。当前程序的进程里面写了用户名“frankxu”,密码“1234qwer”,这种方式并不提倡。

图片6.png

正常情况下,可以定义特殊规则“configuer”,针对 rize 请求,可以匹配首页,允许首页所有的人都可以访问;

针对 user,做身份验证。也可以提供表单的登录模式“formLogin()”。做这个例子,是提供这种访问 HOME 可以不做身份验证的方法,可以直接进入。

图片5.png

查询数据库 Get all,演示在浏览器输入“localhost:8081”,启动网址,会发现一个问题,访问一个接口时,比如 user 查看所有用户,会自动跳转到“login”。当请求一个地址的时候,发现不是可忽略的地址,会自动拦截,跳转到登录界面,这个登录界面是基于表单。

这时会要求输入用户账号和密码,用户账号和密码是定义死的。

图片4.png

之前已经测试过了,点击登录,“Users/gerAll”可以访问

图片3.png

如上图所示,出现了3个账号和密码,这3个账号全部返回。这里还有别的接口,“GetById”

图片2.png

测试一下,输入“GetById/1”,返回 ID 为1的账号和密码:

图片1.png

 

三、Java 面试题

1.本质:URL,拦截请求,验证,放行或者拒绝

注意规则的顺序,正常的项目,会有一个访问,并且有拦截请求操作,安全机制本质上是拦截请求,基于 URL 规则,判断请求是不是要拦截,验证,然后放行或者拒绝。验证过程,可以调用缓存或数据库实现安全验证规则。

2. Java Spring Security 安全机制;

3. 如何扩展使用 Token 令牌验证;

4. JWT 开源安全令牌组件;

5. 如何支持 X509 正式验证;

6. 自定义实现 Spring Boot 2.5.x 身份验证;

7. API 安全如何实现;

8. SSO 单点登录怎么实现?

9. 微服务 Spring Cloud 安全体系;

10. 转 Java ,跳槽一线互联网公司。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
API 数据安全/隐私保护 数据格式
API 资源详解:从概念到实战的完整指南
本文深入解析了 API 资源的概念、特征与设计原则,涵盖 RESTful 规范、资源分类、层级结构及实际应用示例。内容还包括版本管理、安全策略与性能优化技巧,帮助开发者构建高效、可维护的 API 系统。
|
6天前
|
缓存 运维 安全
7天精通电商API:从接入到运维的完整实战手册
本文全面解析电商API接口技术,从基础概念到高阶应用,涵盖商品、订单、支付与营销等核心模块,并深入探讨性能优化、安全防护与智能化发展方向,助你掌握驱动数字商业的核心技术。
|
11天前
|
安全 API Python
详解手机状态查询API实战指南
手机状态查询API是一款高效接口,可实时识别手机号状态(实号、空号、风险号等),帮助企业筛选有效号码,提升业务触达率与客户体验。
61 0
|
1月前
|
JSON 安全 API
商城API接口:上货安全与实战指南
商城上货API接口在电商运营中扮演着核心角色,本文从功能、类型、安全性及实战案例多角度剖析其应用价值。主要功能涵盖商品信息管理(如发布、图片上传、类目设置)、库存与价格管理、订单处理、物流信息管理、用户信息管理及销售数据分析等。API类型包括RESTful、SOAP、JSON和XML等,其中RESTful和JSON因高效简洁而广泛应用。安全性方面,通过身份验证、授权及数据加密等措施保障接口安全,确保数据传输的可靠性。这些内容为开发者优化商城运营提供了重要指导。
45 1
|
3天前
|
消息中间件 缓存 JSON
亚马逊SP-API开发实战:商品数据获取与操作
本文介绍了亚马逊SP-API接入流程,包括开发者注册、OAuth2.0认证示例及核心商品接口的使用。涵盖商品信息查询、批量查询、限流规则与错误处理,并提供最佳实践建议,如使用AWS Lambda与SQS实现高效数据同步。
亚马逊SP-API开发实战:商品数据获取与操作
|
5天前
|
缓存 监控 API
1688平台开放接口实战:如何通过API获取店铺所有商品数据(Python示列)
本文介绍如何通过1688开放平台API接口获取店铺所有商品,涵盖准备工作、接口调用及Python代码实现,适用于商品同步与数据监控场景。
|
28天前
|
缓存 自然语言处理 监控
基于通义大模型的智能客服系统构建实战:从模型微调到API部署
本文详细解析了基于通义大模型的智能客服系统构建全流程,涵盖数据准备、模型微调、性能优化及API部署等关键环节。通过实战案例与代码演示,展示了如何针对客服场景优化训练数据、高效微调大模型、解决部署中的延迟与并发问题,以及构建完整的API服务与监控体系。文章还探讨了性能优化进阶技术,如模型量化压缩和缓存策略,并提供了安全与合规实践建议。最终总结显示,微调后模型意图识别准确率提升14.3%,QPS从12.3提升至86.7,延迟降低74%。
276 14
|
17天前
|
JSON API UED
汇率查询API实战指南:通过Python调用获取多国汇率信息
本文介绍如何通过 Python 快速集成多币种汇率查询接口,实现实时获取全球主要货币汇率数据。适用于跨境电商价格换算、国际贸易结算等场景,帮助提升用户体验并规避汇率波动风险。
169 0
汇率查询API实战指南:通过Python调用获取多国汇率信息
|
25天前
|
API Python
VIN码查询API的实战指南:获取二手车信息以Python为例
随着机动车保有量上升,中国二手车市场迎来发展机遇。本文介绍如何通过VIN码查询API获取车辆详细信息,提升交易透明度与安全性。
41 1