0


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

文章目录

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)publicclassApplicationConfigurerAdapterextendsWebSecurityConfiguerAdapter{@Overrideprotectedvoidconfigure( 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,跳槽一线互联网公司。
标签: 权限 安全

本文转载自: https://blog.csdn.net/KongZhongNiao/article/details/127691242
版权归原作者 天空鸟_时光不老 所有, 如有侵权,请联系我们删除。

“7. Spring Boot2.5 安全机制与 REST API 身份验证实战”的评论:

还没有评论