当前位置:主页 > 查看内容

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

发布时间:2021-06-11 00:00| 位朋友查看

简介:哈喽各位同学们大家好呀 提前祝同学们端午节快乐 今天小编为大家分享开发者学院中课程“Spring Boot2.5安全机制与 REST API身份验证实战 ”干货总结哦~Spring Boot 2.5.x开发实战可是Java中级工程师必备课程 课程链接以及图谱地址小编已经为大家指路了 搭配……

哈喽各位同学们大家好呀 提前祝同学们端午节快乐 今天小编为大家分享开发者学院中课程“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. 灵活扩展。?

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。对接不同的数据源 两个都可以 取决于个人倾向 两个都非常完善 正常情况下 如果希望技术上简单一点 可以直接使用一整套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的数据库的链接。?

image.png?

后面稍微注意一下 这里面有个starter?security 加完以后 可以看一下左边的依赖包的安全组件 有包括spring security?config?、spring security core、spring 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 跳槽一线互联网公司。?

?


本文转自网络,原文链接:https://developer.aliyun.com/article/784669
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐