开发者学堂课程干货总结——Spring Boot 2.5.x开发实战(七)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: Spring Boot 2.5.x开发实战课时7——Spring Boot2.5安全机制与 REST API身份验证实战,Spring Boot 2.5.x开发实战是学习Java Spring Cloud微服务架构的必经之路。电子书+视频为同学带来最佳学习效果,文字、课程链接、图谱地址统统为大家放送了哦

哈喽各位同学们大家好呀,提前祝同学们端午节安康🎇!今天小编为大家分享开发者学院中课程Spring Boot2.5安全机制与 REST API身份验证实战 ”干货总结哦~Spring Boot 2.5.x开发实战可Java中级工程师必备课程!

课程链接以及图谱地址小编已经为大家指路了,搭配学习效果更佳👇

课程名称:Spring Boot 2.5.x开发实战

课程地址:https://developer.aliyun.com/learning/course/71

图谱名称:Alibaba Java 技术图谱

图谱地址:https://developer.aliyun.com/graph/java


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


一、Java Spring Boot 2.5安全机制 

本节课讲的是应用程序安全问题Spring Boot体系里,提供了一套安全机制,以对接各种不同的安全框架,包括自定义实现原始身份验证机制。 

模拟简单的REST API项目启用身份验证进行扩展对接MySQL数据库,甚至对接Release缓存实现整个用户的注册和身份验证过程。 

但大型项目,比如淘宝浪微博的账号验证基本上都在Release里面进行用户的规模比较大,而且整个的用户信息在分布式缓存里面进行保存后面可以扩展到Release身份验证机制,把身份验证ReleaseMySQL结合起来,实现一个完整的项目。 

(一)Java Spring Boot 2.0安全机制 

Spring Boot提供的安全机制,可以用Spring Security 开源框架,也可以用Apache Shiro 开源框架,还可以用自定义实现安全验证Web框架开发底层本质上是Web请求进入Web框架,然后可以拦截,这里也叫AOP编程,用于做拦截,做身份验证的工作。总结: 

1. 自定义实现安全验证 

2. Apache Shiro 开源框架 

3. Spring Security 开源框架 

4. 大量使用AOP 

5. 依赖注入思想 

6. 灵活扩展 

image.png 

(二)Java Spring Boot 2.5安全机制 

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

目前应用程序身份验证的类型非常多,不仅基于网页的Form表单验证Basic摘要身份验证令牌身份验证令牌身份验证主要是用在REST API,包括一些大型的微服务架构程序中当然还有企业级身份验证,比如基于企业局域网客户身份验证组织内部使用的身份验证还有跨第三方平台开放式身份验证体系 

image.png 

(三)安全漏洞 

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

安全漏洞建议总结: 

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

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

3. 紧急修复 Spring Framework 版本包含一个安全漏洞(CVE-2020-5421)的修复程序。此漏洞可以通过 sessionId 绕过RFD (反射型文件下载)保护 

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

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

6. Spring 框架升级 5.0.0 - 5.0.2 

7. Spring 框架升级 4.3.0 - 4.3.13 

8. Spring Boot 1.5.10 

image.png 

(四)Java Spring Security 

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

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

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

2. 保护Spring应用系统的安全标准 

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

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

5. 前身是Acegi Security 

6. 提供安全认证服务的框架 

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

8. Authentication验证和Authorization授权 

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

(五)Java安全框架Shiro 

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

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

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

3. 使用Shiro可以快速实现系统安全 

4. Shiro其前身是Jsecurity项目 

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

6. 可应用于Web环境,非Web环境 

7. 支持多种数据源MySQL等 

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

 

二、Java Spring Boot 2.5安全实战 

(一)Spring Security Demo 

在之前的WEB架构基本上,可以加入门的starter-security的依赖,入完以后会提供必要的安全组件,默认的就是security组件,当然也可以替换,两个都可以配置。实现代码如下: 

<dependencies> 

... 

<dependency> 

<groupId>org.springframework.boot</groupId> 

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

</dependency> 

... 

</dependencies> 

 

(二)WebSecurityConfig 

早期的Spring1.x几版本中,需要自己显示去关闭或者开放安全验证现在的基本上默认是已经启动了可以直接设置WebSecurityConfig配置文件,注入必要的安全配置规则,比如基于某个内路由规则针对order订单的身份验证等,甚至加入角色的限制都可以实现提供了强大的规则 

WebSecurityConfig总结: 

1. Spring Security的配置类 

2. WebSecurityConfig 

3. 可以配置安全规则 

4. 默认启用basic验证 

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

6. security.basic.enabled = false 

 

(三)Web全站安全验证配置 

下面这段代码,是Web全站安全验证配置的例子,针对anyRequest定制时所有的请求都身份验证。hasRole表示针对当前的请求访问某个地址或者所有的请求访问时具备某个角色当然这个角色或者权限的验证需要定制扩展接口就可以了。比如连数据库或者连缓存,实现角色查询,有校验就可以了。 

@ Configuration 

@ (SecurityProperties.BASIC_AUTH_ORDER - 10) 

public class ApplicationConfigurerAdapter extends 

WebSecurityConfiguerAdapter{ 

@Override 

protected void configure( http) throws 

{ 

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

 .authorizeRequests() 

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

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

 .anyRequest().isAuthenticated(); 

} 

} 

 

(四)重新实现验证机制 

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

 WebSecurityConfig安全配置类 

 UserDetailsService 接口 

 

 实践案例演示: 

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

image.png 

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

image.png 

 

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

image.png 

正常情况下,可以定义特殊规则“configuer”,针对rize请求,可以匹配首页,允许首页所有的人都可以访问;针对user,做身份验证。也可以提供表单的登录模式“formLogin()做这个例子,是提供这种访问HOME可以不做身份验证的方法,可以直接进入。 

image.png 

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

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

image.png 

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

 

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

 

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

 

 

(五)Java面试题 

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

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

其他的Java面试题这节课就不一一说明了,留给大家课后思考。 

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月前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
3166 46
|
1月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
3月前
|
前端开发 Java API
利用 Spring WebFlux 技术打造高效非阻塞 API 的完整开发方案与实践技巧
本文介绍了如何使用Spring WebFlux构建高效、可扩展的非阻塞API,涵盖响应式编程核心概念、技术方案设计及具体实现示例,适用于高并发场景下的API开发。
365 0
|
7月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
506 7
|
2月前
|
安全 数据可视化 Java
AiPy开发的 Spring 漏洞检测神器,未授权访问无所遁形
针对Spring站点未授权访问问题,现有工具难以检测如Swagger、Actuator等组件漏洞,且缺乏修复建议。全新AI工具基于Aipy开发,具备图形界面,支持一键扫描常见Spring组件,自动识别未授权访问风险,按漏洞类型标注并提供修复方案,扫描结果可视化展示,支持导出报告,大幅提升渗透测试与漏洞定位效率。
|
7月前
|
人工智能 Java 数据库
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
|
7月前
|
前端开发 Java UED
从基础到进阶:Spring Boot + Thymeleaf 整合开发中的常见坑与界面优化
本文深入探讨了 **Spring Boot + Thymeleaf** 开发中常见的参数绑定问题与界面优化技巧。从基础的 Spring MVC 请求参数绑定机制出发,分析了 `MissingServletRequestParameterException` 的成因及解决方法,例如确保前后端参数名、类型一致,正确设置请求方式(GET/POST)。同时,通过实际案例展示了如何优化支付页面的视觉效果,借助简单的 CSS 样式提升用户体验。最后,提供了官方文档等学习资源,帮助开发者更高效地掌握相关技能。无论是初学者还是进阶用户,都能从中受益,轻松应对项目开发中的挑战。
388 0
|
3月前
|
缓存 Java API
Spring WebFlux 2025 实操指南详解高性能非阻塞 API 开发全流程核心技巧
本指南基于Spring WebFlux 2025最新技术栈,详解如何构建高性能非阻塞API。涵盖环境搭建、响应式数据访问、注解与函数式两种API开发模式、响应式客户端使用、测试方法及性能优化技巧,助你掌握Spring WebFlux全流程开发核心实践。
700 0

热门文章

最新文章