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

简介: 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;
相关文章
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
1577 79
|
开发框架 负载均衡 Java
当热门技术负载均衡遇上 Spring Boot,开发者的梦想与挑战在此碰撞,你准备好了吗?
【8月更文挑战第29天】在互联网应用开发中,负载均衡至关重要,可避免单服务器过载导致性能下降或崩溃。Spring Boot 作为流行框架,提供了强大的负载均衡支持,通过合理分配请求至多台服务器,提升系统可用性与可靠性,优化资源利用。本文通过示例展示了如何在 Spring Boot 中配置负载均衡,包括添加依赖、创建负载均衡的 `RestTemplate` 实例及服务接口调用等步骤,帮助开发者构建高效、稳定的应用。随着业务扩展,掌握负载均衡技术将愈发关键。
512 6
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
319 0
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
1295 1
Spring 框架:Java 开发者的春天
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
391 8
|
Java API UED
【实战秘籍】Spring Boot开发者的福音:掌握网络防抖动,告别无效请求,提升用户体验!
【8月更文挑战第29天】网络防抖动技术能有效处理频繁触发的事件或请求,避免资源浪费,提升系统响应速度与用户体验。本文介绍如何在Spring Boot中实现防抖动,并提供代码示例。通过使用ScheduledExecutorService,可轻松实现延迟执行功能,确保仅在用户停止输入后才触发操作,大幅减少服务器负载。此外,还可利用`@Async`注解简化异步处理逻辑。防抖动是优化应用性能的关键策略,有助于打造高效稳定的软件系统。
421 2
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的课程考勤及作业提交App的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的课程考勤及作业提交App的详细设计和实现(源码+lw+部署文档+讲解等)
238 6
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的《数据库原理及应用》课程平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的《数据库原理及应用》课程平台的详细设计和实现(源码+lw+部署文档+讲解等)
251 1
|
Java API 开发者
【开发者福音】Spring Boot 异常处理:优雅应对错误,提升应用健壮性,让调试不再是噩梦!
【8月更文挑战第29天】本文通过对比传统错误处理方式与Spring Boot推荐的最佳实践,展示了如何在Spring Boot应用中实现统一且优雅的异常处理。传统方法需在每个可能出错的地方显式处理异常,导致代码冗余且不一致。而Spring Boot的全局异常处理机制则能集中处理所有异常,简化代码并确保错误响应格式统一,提高应用程序的健壮性和可维护性。文中提供了具体的示例代码以帮助读者更好地理解和应用这一机制。
693 0
|
SQL Java 数据库连接
Spring Boot联手MyBatis,打造开发利器:从入门到精通,实战教程带你飞越编程高峰!
【8月更文挑战第29天】Spring Boot与MyBatis分别是Java快速开发和持久层框架的优秀代表。本文通过整合Spring Boot与MyBatis,展示了如何在项目中添加相关依赖、配置数据源及MyBatis,并通过实战示例介绍了实体类、Mapper接口及Controller的创建过程。通过本文,你将学会如何利用这两款工具提高开发效率,实现数据的增删查改等复杂操作,为实际项目开发提供有力支持。
1509 0