文章目录

  • 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,包括一些大型的微服
务架构程序中。当然还有企业级身份验证,比如基于企业局域网的客户身份验证,组织
内部使用的身份验证。还有跨第三方平台的开放式身份验证体系等。

  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 的数据库的链
接。

后面稍微注意一下,这里面有个 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”就可以访问了

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

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

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

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

  1. Spring Boot2整合Shiro(1):身份认证

    Spring Boot2整合Shiro(1):身份认证 前言 本文主要介绍了在Spring Boot2项目中整合Shiro实现登录认证.本文假设读者已经对Shiro和基于RBAC的权限控制系统有了基本 ...

  2. 使用API​​身份验证的Spring Security

    背景 尽管有许多博客文章详细介绍了如何使用Spring Security,但是当问题域位于标准LDAP或数据库身份验证之外时,我仍然经常发现配置挑战. 在本文中,我将介绍一些针对Spring Secu ...

  3. oidc auth2.0_使用Spring Security 5.0和OIDC轻松构建身份验证

    oidc auth2.0 "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和 ...

  4. 使用Spring Security 5.0和OIDC轻松构建身份验证

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. Spri ...

  5. 无状态Spring安全性第2部分:无状态身份验证

    Spring Stateless Security系列的第二部分是关于以无状态方式探索身份验证的方法. 如果您错过了CSRF的第一部分,可以在这里找到. 因此,在谈论身份验证时,其全部内容就是让客户端 ...

  6. java ldap操作实例_Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法...

    java ldap操作实例 LDAP身份验证是世界上最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft为Windows提供的LDAP实现)是另一种广泛使用的 ...

  7. Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法

    LDAP身份验证是全球范围内最流行的企业应用程序身份验证机制之一,而Active Directory (Microsoft针对Windows的LDAP实现)是另一种广泛使用的LDAP服务器. 在许多项 ...

  8. 如何使用Java和XML Config在Spring Security中启用HTTP基本身份验证

    在上一篇文章中,我向您展示了如何在Java应用程序中启用Spring安全性 ,今天我们将讨论如何使用Spring Security 在Java Web应用程序中启用Basic HTTP身份验证 . 如 ...

  9. ASP.NET身份验证机制membership入门——配置篇(1){转}

    几乎所有的系统中都会使用到访问控制和角色管理这样的功能,例如:新建.修改.删除用户和角色,为用户分配角色,管理角色中的用户等等.于是MS在ASP.NET 2.0开始,实现了这些功能,使得我们在开发中, ...

最新文章

  1. 【最强ResNet改进系列】Res2Net:一种新的多尺度网络结构,性能提升显著
  2. I/O事件处理模型之Reactor和Proactor 【转】
  3. 图像处理和计算机视觉中的经典论文(部分)
  4. 两千年是不是闰年 输出错误_干货!AMOS常见的10种错误及解决办法!
  5. 【Linux】一步一步学Linux——shopt命令(214)
  6. Linux操作(4)—— 如何安装或卸载软件
  7. sublime text html乱码,Sublime Text 2中文显示乱码的解决方法
  8. 前端学习(1348):用户的增删改查操作5修改
  9. 一文读懂VictoriaMetrics集群方案
  10. Algs4-1.4.14 4-sum
  11. php 函数strtr 替换函数实例解析 strtr 速度比较快
  12. 2、组件注册-@Configuration@Bean给容器中注册组件
  13. Netty工作笔记0083---通过自定义协议解决粘包拆包问题1
  14. js call与apply函数
  15. 基于Python向Abaqus导入txt、dat数据(附abaqus中python二次开发课程)
  16. 010指北方位惯导系统的力学编排之平台的指令角速度
  17. 安装历史版本nvidia显卡驱动
  18. Linux 开启443端口
  19. mysql怎么设置不要密码_mysql无密码怎么设置密码
  20. 动画:从 AE 到 Web

热门文章

  1. lingo3d学习之路
  2. 【订单旗帜接口】拼多多商家如何通过客服来增加销量,客服小技巧
  3. 魅族16支持html吗,魅族 16可以无线充电吗?
  4. 网站推广大师 v8.0 绿色
  5. 互联网人的职场关系攻略
  6. python pycrypto_转:python安装pycrypto
  7. HDU 4081 最小生成树(或者次小生成树)
  8. 视频太长怎么办?将一个长视频分割成2段的方法
  9. 外贸业务斑外贸业务必备--国外企业黄页
  10. linux 安装中文字体