哈喽各位同学们大家好呀 提前祝同学们端午节快乐 今天小编为大家分享开发者学院中课程“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身份验证机制 把身份验证与Release和MySQL结合起来 实现一个完整的项目。?
一 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. 灵活扩展。?
?
二 Java Spring Boot 2.5安全机制?
也可以进行授权 定了一些角色 设置对应的权限 这里支持的方式很多。Spring Boot作为快速开发框架 底层有Web开发的接口 可以做网站、?API应用、定时任务应用等等。?
目前应用程序身份验证的类型非常多 不仅基于网页的Form表单验证、Basic、摘要身份验证、令牌身份验证 令牌身份验证主要是用在REST API 包括一些大型的微服务架构程序中。当然还有企业级身份验证 比如基于企业局域网的客户身份验证 组织内部使用的身份验证。还有跨第三方平台的开放式身份验证体系等。?
?
三 安全漏洞?
后续基于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。?
?
四 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。对接不同的数据源 两个都可以 取决于个人倾向 两个都非常完善 正常情况下 如果希望技术上简单一点 可以直接使用一整套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安全实战?
一 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的数据库的链接。?
?
后面稍微注意一下 这里面有个starter?security 加完以后 可以看一下左边的依赖包的安全组件 有包括spring security?config?、spring security core、spring security?web等。?
?
?
下面看一下 代码具体的配置和实现 新版本默认已经集成 现在最主要的要有Web安全配置 全局配置的时候使用内存验证 实际可以对接数据库、对接缓存。当前程序的进程里面写了用户名“frankxu”,密码“1234qwer”,这种方式并不提倡。?
?
正常情况下 可以定义特殊规则“configuer”,针对rize请求 可以匹配首页 允许首页所有的人都可以访问 针对user 做身份验证。也可以提供表单的登录模式“formLogin()”。做这个例子 是提供这种访问HOME可以不做身份验证的方法 可以直接进入。?
?
查询数据库Get all 演示在浏览器输入“localhost:8081”,启动网址 会发现一个问题 访问一个接口时 比如user查看所有用户 会自动跳转到“login”。当请求一个地址的时候 发现不是可忽略的地址 会自动拦截 跳转到登录界面 这个登录界面是基于表单。?
这时会要求输入用户账号和密码 用户账号和密码是定义死的。?
?
为我之已经测试过了 点击登录 “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安全体系 ?
?
溢价 域名 的续费价格如何?通常来说,因为溢价域名的价值高于普通域名,所以溢...
本文转载自微信公众号「bugstack虫洞栈」,作者小傅哥 。转载本文请联系bugstack...
本文转载自公众号读芯术(ID:AI_Discovery)。 这一刻你正在应对什么挑战?这位前...
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
在Python开发过程中,我们难免会遇到多重条件判断的情况的情况,此时除了用很多...
前言 统计科学家使用交互式的统计工具(比如R)来回答数据中的问题,获得全景的认...
背景 我们知道 如果在Kubernetes中支持GPU设备调度 需要做如下的工作 节点上安装...
基本介绍 给定 n 个权值作为 n 个叶子节点,构造一颗二叉树,若该树的带权路径长...
近几年,互联网行业蓬勃发展,在互联网浪潮的冲击下,互联网创业已成为一种比较...
TIOBE 公布了 2021 年 3 月的编程语言排行榜。 本月 TIOBE 指数没有什么有趣的变...