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

news2024/11/29 22:42:59

文章目录

  • Spring Boot2.5 安全机制与 RESTAPI 身份验证实战
    • 一、Java Spring Boot 2.5 安全机制
      • Java Spring Boot 2.0 安全机制
      • 安全漏洞
        • 安全漏洞建议总结:
      • Java Spring Security
        • Java 安全框架 Shiro
    • 二、Java Spring Boot 2.5 安全实战
      • Spring Security Demo
      • 2. WebSecurityConfig
      • Web 全站安全验证配置
      • 重新实现验证机制
        • 实践案例演示:
      • 五、Java 面试题

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

内容简介:
一、Java Spring Boot 2.5 安全机制
二、Java Spring Boot 2.5 安全实战

一、Java Spring Boot 2.5 安全机制

本节课讲的是应用程序安全问题,在 Spring Boot 体系里,提供了一套安全机制,
可以对接各种不同的安全框架,包括自定义实现原始的身份验证机制。
模拟简单的 REST API 项目,启用身份验证,进行扩展对接 MySQL 数据库,甚至对
接 Release 缓存,实现整个用户的注册和身份验证过程。
但大型项目,比如淘宝、微信、新浪微博的账号验证基本上都在 Release 里面进行,
用户的规模比较大,而且整个的用户会话信息,要在分布式缓存里面进行保存。后面可
以扩展到 Release 身份验证机制,把身份验证与 Release 和 MySQL 结合起来,实现一个
完整的项目。

  1. 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)灵活扩展。
2. ### Java Spring Boot 2.5 安全机制

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

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

image-20221103172749567

  1. 安全漏洞

后续基于 Spring Boot 进行开发,尽量升级到比较新的版本,最好是 Spring Boot
2.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。

  1. 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 跨站请求伪造。

  1. Java 安全框架 Shiro

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

  1. Spring Security Demo

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

<dependencies>
... <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId> spring-boot-starter-security </artifactId>
</dependency>
... </dependencies>

2. WebSecurityConfig

早期的 Spring1.x 几版本中,需要自己显示去关闭或者开放安全验证,现在的基本
上默认是已经启动了。可以直接设置 WebSecurityConfig 配置文件,注入必要的安全配
置规则,比如基于某个内路由规则、针对 order 订单的身份验证等,甚至加入角色的限
制都可以实现,提供了强大的规则。
WebSecurityConfig 总结:
1)Spring Security 的配置类;
2)WebSecurityConfig;
3)可以配置安全规则;
4)默认启用 basic 验证;
5)# Spring Security 可以在配置文件中关闭;
6)security.basic.enabled = false。

  1. 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();
}
}
  1. 重新实现验证机制

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

实践案例演示:

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

image-20221104150224763

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rXk7xLDd-1667549379431)(https://cdn.jsdelivr.net/gh/WaterMoonMirror/typora-img/img/202211041502395.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WTNmYJvR-1667549379431)(https://cdn.jsdelivr.net/gh/WaterMoonMirror/typora-img/img/202211041524449.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-faIxJN1F-1667549379432)(https://cdn.jsdelivr.net/gh/WaterMoonMirror/typora-img/img/202211041525222.png)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H7xloPdW-1667549379432)(https://cdn.jsdelivr.net/gh/WaterMoonMirror/typora-img/img/202211041526260.png)]

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

image-20221104152722479

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

image-20221104152752997

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

image-20221104152814325

五、Java 面试题

1.本质:URL,拦截请求,验证,放行或者拒绝
注意规则的顺序,正常的项目,会有一个访问,并且有拦截请求操作,安全机制本
质上是拦截请求,基于 URL 规则,判断请求是不是要拦截,验证,然后放行或者拒绝。
验证过程,可以调用缓存或数据库实现安全验证规则。
其他的 Java 面试题这节课就不一一说明了,留给大家课后思考。

  1. Java Spring Security 安全机制;

  2. 如何扩展使用 Token 令牌验证;

  3. JWT 开源安全令牌组件;

  4. 如何支持 X509 正式验证;

  5. 自定义实现 Spring Boot 2.5.x 身份验证;

  6. API 安全如何实现;

  7. SSO 单点登录怎么实现?

  8. 微服务 Spring Cloud 安全体系;
    证规则。
    其他的 Java 面试题这节课就不一一说明了,留给大家课后思考。

  9. Java Spring Security 安全机制;

  10. 如何扩展使用 Token 令牌验证;

  11. JWT 开源安全令牌组件;

  12. 如何支持 X509 正式验证;

  13. 自定义实现 Spring Boot 2.5.x 身份验证;

  14. API 安全如何实现;

  15. SSO 单点登录怎么实现?

  16. 微服务 Spring Cloud 安全体系;

  17. 转 Java,跳槽一线互联网公司。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】pyinstaller打包百科全书

前言 记录pyinstaller打包中的常用命令和报错。 详细的还是去官网自己看吧&#xff0c;这里只记录打包中常用到的命令。 如果我这里帮助不到你&#xff0c; 官网在这里&#xff1a;https://github.com/pyinstaller/pyinstaller 这两篇文章基本覆盖100%的报错了&#xff0c; 参…

【微服务】分布式下服务调用产生的问题之服务容错

服务容错前言模拟高并发场景压测测试服务雪崩效应常见容错方案隔离超时限流熔断降级常见的容错组件HystrixResilience4JSentinel总结前言 上篇中&#xff0c;我们了解了Ribbon的概念&#xff0c;也实现了基于Ribbon的服务调用&#xff0c;但同样也引发了另一个问题&#xff0c…

什么?“裸辞”一个月拿到13家offer,网友:你是在找存在感吗···

相信大家都知道天下分久必合、合久必分的道理&#xff0c;所以&#xff0c;一旦行业发展成熟&#xff0c;必定会重新洗牌&#xff0c;就像朝代的更替一样&#xff0c;去其糟粕&#xff0c;取其精华&#xff01;现在互联网发展就是遇到了这样的瓶颈期&#xff0c;出现了衰退&…

【Mac】VSCode 更新1.73版本后JSTS代码跳转异常

前言 今天有小伙伴MacOS更新了VS Code版本后&#xff0c;说工程内的代码跳转全部异常了&#xff0c;没法正确跳转。搞了两三个小时没搞出来&#xff0c;找到了我&#xff0c;让我帮忙瞧瞧。排查下来发现这问题有点意思&#xff0c;故此记录一下。 问题 排查姿势 1. 提示没有定…

【数据结构】单链表

文章目录单链表链表的概念及结构链表的分类链表的实现动态申请一个节点创建链表单链表打印单链表尾插单链表尾删单链表头插单链表头删单链表 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序 是通过链表中的…

代码中统一异常如何处理,才能让代码更清晰

背景 软件开发过程中&#xff0c;不可避免的是需要处理各种异常&#xff0c;甚至有一半以上的时间都是在处理各种异常情况&#xff0c;所以代码中就会出现大量的try {...} catch {...} finally {...} 代码块&#xff0c;不仅有大量的冗余代码&#xff0c;而且还影响代码的可读…

力扣刷题链表需要调试?一个简单的调试器帮你解决苦恼

本人在刷链表题时&#xff0c;由于是新手&#xff0c;所以老是过不去&#xff0c;需要调试&#xff0c;力扣会员开不起&#xff0c;在VS自己创建一个链表太麻烦 &#xff0c;所以就有了今天这个 对于懒人的调节力扣链表便捷器 这个东西很简单&#xff0c;但是很有效 文章目录1.…

python数学建模--sympy三维图像绘制

目录问题引出库选择与绘制准备plot3d类api简介图像绘制与参数说明关键字参数绘图举例绘图的案例三角函数另一个三角函数问题引出 在求解二元函数最值的时候&#xff0c;我们不知道自己经过若干个步骤求出的结果是否正确&#xff0c;那么我们该怎么办呢&#xff1f;一种办法就是…

学完Python,不做程序员,只接兼职,哎,就是玩儿

现在这个时代&#xff0c;人人开始追求做斜杠青年&#xff0c;多方面开展副业&#xff0c;赚取几份工资。有很多朋友就抓住了Python的风口&#xff0c;靠着Python兼职月入一万。那么学完Python&#xff0c;有哪些可以做的兼职呢&#xff1f; 一、闲暇时间&#xff0c;接自由单…

2020年数维杯数学建模B题以家庭为单位的小规模多品种绿色农畜产品经营模式开发求解全过程文档及程序

2020年数维杯数学建模 B题 以家庭为单位的小规模多品种绿色农畜产品经营模式开发 原题再现&#xff1a; 在全球化疫情蔓延和国民生活水平稳步提高大形势下&#xff0c;居民对于绿色农畜产品的需求可能会迎来新的爆发期。传统大规模种植或养殖模式因其较大的风险、产品质量的非…

第四章 带头双向链表的讲解与实现

初阶数据结构 第一章 时间复杂度和空间复杂度 第二章 动态顺序表的实现 第三章 单向链表的讲解与实现 第四章 带头双向链表的讲解与实现 文章目录初阶数据结构前言一、什么是头节点&#xff08;哨兵位&#xff09;二、双向链表结点的定义三、接口函数的实现1、初始化2、尾插3、…

【附源码】计算机毕业设计java中国朝鲜族民族特色服务系统设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

超全,看完这份微服务架构与实践文档,微服务不再难

前言&#xff1a; 微服务近年来受到了极大的关注并成为趋势&#xff0c;不信的话可以查看 Google Trends。 可以看到从2014年开始人们对它产生了极大的兴趣&#xff0c;随着时间的推移&#xff0c;这一趋势仍在增长。 随着数字化转型的推进&#xff0c;越来越多的企业开始尝…

IntelliJ IDEA禁止某些文件夹indexing

IntelliJ IDEA禁止某些文件夹indexing 文章目录IntelliJ IDEA禁止某些文件夹indexing问题描述方法一&#xff1a;标记文件夹为Exclude方法二&#xff1a;.iml文件中手动加入excludeFolder节点方法三&#xff1a;直接加入IDEA忽略文件和文件夹列表问题描述 IDEA启动后&#xff…

计算机毕业设计(附源码)python在线答题系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

MySQL数据库——日志管理、备份与恢复

一、数据备份的重要性 备份的主要目的是灾难恢复。 在生产环境中&#xff0c;数据的安全性至关重要。 任何数据的丢失都可能产生严重的后果。 造成数据丢失的原因&#xff1a; 程序错误人为操作错误运算错误磁盘故障灾难&#xff08;如火灾、地震&#xff09;和盗窃 二、数据…

【Tomcat】解决Tomcat服务器乱码问题

俩地方开展出现乱码的原因1、以startup.bat文件打开的服务器出现乱码2、在IDEA中运行Tomcat服务器出现乱码问题3、有关社区版IDEA如何开发JavaWeb项目出现乱码的原因 使用了错误的字符编码去解码字节流&#xff0c;所以出现乱码咱思维要清晰&#xff0c;就去找字符编码是否与其…

vue3.0微信活动推广分享项目-实现验证码登录功能

⭐️⭐️⭐️ 作者&#xff1a;船长在船上 &#x1f6a9;&#x1f6a9;&#x1f6a9; 主页&#xff1a;来访地址船长在船上的博客 &#x1f528;&#x1f528;&#x1f528; 简介&#xff1a;CSDN前端领域优质创作者&#xff0c;资深前端开发工程师&#xff0c;专注前端开发…

二、稀疏数组和队列

稀疏数组 1、基本介绍 当一个数组中大部分元素为0&#xff0c;或者为同一个值的数组时&#xff0c;可以用稀疏数组来保存该数组。 2、处理方式 记录数组一共有几行几列&#xff0c;有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模数组中&#xff0c;从而缩小…

【OpenCV】红绿灯检测C++Demo实现

很久以来一直想实现红绿灯检测&#xff0c;今天它来了。 文章目录原理代码实现打包程序为exe原理 OpenCV好强&#xff0c;能够提取红绿灯的轮廓&#xff0c;并根据颜色空间判断红绿&#xff0c;不依赖深度学习算法也能做到可用的效果/demo。 红绿灯检测的基本步骤如下&#x…