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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 快速学习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 ,跳槽一线互联网公司。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
1月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
1月前
|
缓存 自然语言处理 API
阿里巴巴国际站关键字搜索 API 实战:3 步搞定多语言适配 + 限流破局,询盘量提升 40%
跨境电商API开发常陷合规、多语言、限流等坑。本文详解从国际合规(GDPR/CCPA)到参数优化、数据结构化及区域化搜索的全链路方案,附Python代码模板与缓存重试架构,助力提升调用成功率至99%+,精准询盘增长42%。
|
1月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
1月前
|
开发者 API 机器学习/深度学习
淘宝 / 1688 / 义乌购图搜 API 实战指南:接口调用与商业场景应用
本文详解淘宝、1688、义乌购三大平台图片搜索接口的核心特点、调用流程与实战代码。涵盖跨平台对比、参数配置、响应解析及避坑指南,支持URL/Base64上传,返回商品ID、价格、销量等关键信息,助力开发者快速实现商品识别与比价功能。
淘宝 / 1688 / 义乌购图搜 API 实战指南:接口调用与商业场景应用
|
1月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
1月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
2月前
|
人工智能 运维 监控
阿里云 API 聚合实战:破解接口碎片化难题,3 类场景方案让业务响应提速 60%
API聚合破解接口碎片化困局,助力开发者降本增效。通过统一中间层整合微服务、第三方接口与AI模型,实现调用次数减少60%、响应提速70%。阿里云实测:APISIX+函数计算+ARMS监控组合,支撑百万级并发,故障定位效率提升90%。
263 0
|
2月前
|
JSON API 调度
Midjourney 技术拆解与阿里云开发者实战指南:从扩散模型到 API 批量生成
Midjourney深度解析:基于优化Stable Diffusion,实现文本到图像高效生成。涵盖技术架构、扩散模型原理、API调用、批量生成系统及阿里云生态协同,助力开发者快速落地AIGC图像创作。
493 0
|
2月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)