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

简介: 快速学习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;
相关文章
|
3月前
|
负载均衡 监控 Java
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
本文详细介绍了 Spring Cloud Gateway 的核心功能与实践配置。首先讲解了网关模块的创建流程,包括依赖引入(gateway、nacos 服务发现、负载均衡)、端口与服务发现配置,以及路由规则的设置(需注意路径前缀重复与优先级 order)。接着深入解析路由断言,涵盖 After、Before、Path 等 12 种内置断言的参数、作用及配置示例,并说明了自定义断言的实现方法。随后重点阐述过滤器机制,区分路由过滤器(如 AddRequestHeader、RewritePath、RequestRateLimiter 等)与全局过滤器的作用范围与配置方式,提
Spring Cloud Gateway 全解析:路由配置、断言规则与过滤器实战指南
|
4月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
825 3
|
4月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
398 0
|
2月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
2月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
3月前
|
人工智能 Java 机器人
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
Spring AI Alibaba集成Ollama,基于Java构建本地大模型应用,支持流式对话、knife4j接口可视化,实现高隐私、免API密钥的离线AI服务。
2878 1
基于Spring AI Alibaba + Spring Boot + Ollama搭建本地AI对话机器人API
|
4月前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
4月前
|
缓存 Java API
Spring WebFlux 2025 实操指南详解高性能非阻塞 API 开发全流程核心技巧
本指南基于Spring WebFlux 2025最新技术栈,详解如何构建高性能非阻塞API。涵盖环境搭建、响应式数据访问、注解与函数式两种API开发模式、响应式客户端使用、测试方法及性能优化技巧,助你掌握Spring WebFlux全流程开发核心实践。
813 0

热门文章

最新文章