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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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?spm=a2c6h.21254954.0.0.4e905907uoWZzr

图谱名称:Alibaba Java 技术图谱

图谱地址:https://developer.aliyun.com/graph/java?spm=a2c6h.21110250.J_5703890090.6.700e3c67EjOBeJ


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”就可以访问了, 

image.png 

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

image.png 

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

image.png 

 

(五)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,跳槽一线互联网公司 

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
155 0
|
7月前
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
SpringBoot+Mybatis-Plus+PageHelper分页+多条件查询
176 0
|
16天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
30 2
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
58 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
2月前
|
缓存 NoSQL Java
Springboot自定义注解+aop实现redis自动清除缓存功能
通过上述步骤,我们不仅实现了一个高度灵活的缓存管理机制,还保证了代码的整洁与可维护性。自定义注解与AOP的结合,让缓存清除逻辑与业务逻辑分离,便于未来的扩展和修改。这种设计模式非常适合需要频繁更新缓存的应用场景,大大提高了开发效率和系统的响应速度。
68 2
|
6月前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
55 2
|
6月前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
66 2
|
6月前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
440 1
|
6月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
56 1
|
6月前
springboot2.4.5使用pagehelper分页插件
springboot2.4.5使用pagehelper分页插件
160 0