等保三级需求分析及实现

15 篇文章 0 订阅
14 篇文章 0 订阅

接了一个等保三级的需求,代码写的很顺利,本地自测的时候出现了各种问题,在这记录一下

需求

简单说一下就是在登录时加一个手机验证码校验,当登录失败超过五次时,出现滑块验证(就是大家平常见的那种),登录成功后失败次数清零。

关键点

验证顺序:

  1. 验证滑块
  2. 验证用户名密码
  3. 验证短信验证码

我最开始写的逻辑是先验证用户名密码,这样做是不对的。因为本身是为了防止暴力破解密码,用户名密码都验证对了,再去验证滑块是没有意义的!

记录错误次数的时机

  • 账号密码输入错误
  • 后端验证码不存在/未生成
  • 输入验证码错误
  • 验证码过期
    删除线的部分是产品告知不要累加错误次数,但我个人最开始是认为需要记录的

后端做必要的发送短信时间间隔和次数限制

由于这个接口调用是不是需要token的(未登录时获取验证码),所以要避免别人恶意消耗短信资源,后端需要做60秒内不能重复发送和一天内一个用户的短信上限条数限制(后者这次需求里我没做)

登录成功后,验证码失效/删除

这个点也是我最初遗漏的,后来参照了一下百度,登录成功后是无法用之前的短信验证码再登录的,当然有的系统在验证码有效期内是可以重复登录。我后端登录成功后,直接将之前的验证码数据给删掉了,就没法重复登录了。

实现方式

  • 两张表,一张记录登录用户的短信验证码信息,一张记录登录用户的失败次数
  • 通过实现AuthenticationProvider接口的authenticate方法,在里面做的校验。校验不通过直接抛出OAuth2Exception
  • 为防止抛异常回滚数据,通过使用mq记录用户登录失败次数

改善点

上述方案是同事提前给设计好的,但是我在开发过程中,还是发现了一些可以优化的点
需要记录的信息是短信验证码和失败次数,先说短信验证码,它有以下几个特点:

  1. 60秒的时效性(已经存在60秒的验证码可视为过期数据)
  2. 可能会被高频查询(登录检查是否存在,已存在不会重复发送,避免浪费短信资源和造成短信轰炸的现象)
  3. 从发送(增)到登录验证(查)时间可能会很短
  4. 没有必要作为持久化数据存储

再说失败次数的特点,我们的业务需求是失败超过5次,半小时内登录一直弹出滑块,检索的逻辑是判断更新时间字段(半小时内)及失败次数(>=5),记录失败次数逻辑:是根据用户名取出这条记录的更新时间,如果是在半小时内则累加失败次数,否则失败次数置为1。
其实说到这,大家都能看出利用redis高检索性能,数据自动过期的功能,能更好的实现这个功能。使用MySQL,我写了大量的业务代码去判断是否过期,和对过期数据操作的代码…

其他小问题

自测时调用/oauth/token出现401

org.springframework.security.oauth2.provider.endpoint.TokenEndpoint
调用接口时需要在Header加上Authorization
在这里插入图片描述

OAuth 2中grant_type的作用

https://blog.csdn.net/u012948161/article/details/109743383?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-109743383-blog-102892309.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 嵌入式系统是一种特殊类型的计算机系统,通常用于控制、监测和运行嵌入在其他设备或系统中的应用程序。嵌入式系统通常具有低功耗、高性能和可靠性等特点,用于各种应用领域,如汽车、家电、医疗设备等。 嵌入式系统按照功能分为多个级别,其中三级嵌入式系统是指基于Linux内核的嵌入式系统。Linux是一个自由和开放源代码的操作系统,具有稳定性、安全性和可扩展性等优点。 在三级嵌入式系统中,Linux内核被用作操作系统的核心,提供了任务调度、内存管理、设备驱动、文件系统等基本功能,并且可以根据具体应用的需求进行定制和优化。 使用Linux内核作为嵌入式系统的核心有多个优势。首先,Linux内核具有良好的可移植性,可以适应不同的硬件平台和处理器架构。其次,Linux拥有强大的开发社区和丰富的软件资源,可以快速开发和定制应用程序。此外,Linux内核还有良好的稳定性和安全性,可以证系统的可靠性和安全性。 在三级嵌入式系统中,开发者可以根据具体需求选择不同的Linux发行版,如Debian、Ubuntu等。同时,可以根据系统的资源限制和功能需求进行裁剪和优化,以提高系统的性能和效率。 总之,三级嵌入式系统是基于Linux内核的嵌入式系统,拥有良好的可移植性、稳定性和安全性,可以根据应用的需求进行定制和优化。这种嵌入式系统在各个应用领域都有广泛的应用和发展潜力。 ### 回答2: 嵌入式三级是指在嵌入式系统中的软硬件应用开发,它是一种在底层硬件上运行的操作系统,具有小体积、低功耗、高效性能等特点。在嵌入式三级开发中,开发者需要熟悉linux三级操作系统的架构和应用开发相关知识。 首先,Linux三级是指Linux操作系统的内核、系统调用接口和用户态程序构成的三级结构。在嵌入式系统中,开发者需要了解Linux内核源码的架构和运行原理,以便针对具体硬件平台进行适配和优化。此外,还需要熟悉Linux系统调用接口,了解各个系统调用的功能和使用方法,以便能够利用系统调用接口进行应用程序开发。同时,开发者还需要掌握用户态程序开发的知识,包括C/C++编程、网络编程、多线程编程等,以便能够编写嵌入式应用程序。 嵌入式三级涉及的知识点较为庞杂和复杂,需要具备一定的编程能力和计算机基础知识。首先,需要了解C/C++编程语言,掌握基本语法和常用的数据结构与算法。其次,需要了解操作系统的基本原理和概念,例如进程管理、内存管理、文件系统等。此外,还需要了解嵌入式系统的硬件架构和接口规范,例如串口通信、GPIO控制、外设驱动等。 在嵌入式三级开发中,开发者需要具备问题分析和解决能力,能够根据实际需求和问题来选择和应用合适的技术和工具。同时,还需要具备团队合作和沟通能力,能够与硬件工程师、应用程序员等不同专业背景的人员进行有效的合作和交流。 总之,嵌入式三级是一种综合性较强的技术领域,要求开发者具备扎实的编程基础和操作系统知识,并能够应用这些知识进行嵌入式应用开发。这需要不断学习和实践,提升自己的技术水平和解决问题的能力。 ### 回答3: 嵌入式三级系统是一种针对特定设备和应用领域的操作系统,它的特点是精简、高效和可定制化。Linux是一种开源的操作系统,它具有稳定性和可移植性的优势。在嵌入式系统中,将Linux与嵌入式技术相结合,形成了嵌入式Linux三级系统。 嵌入式三级系统中的三级指的是:硬件级、驱动级和应用级。 硬件级是指嵌入式系统与硬件之间的接口层,主要包括硬件抽象层(HAL)和底层驱动程序。硬件抽象层提供了一种统一的接口,方便上层应用程序对硬件进行访问和控制;底层驱动程序负责与硬件进行交互和控制。 驱动级是指驱动层,它负责管理和控制硬件设备。这包括与外设的通信、数据传输和设备管理等功能。驱动程序通过与硬件交互,提供了一系列的API供上层应用程序使用。 应用级是指嵌入式系统上层的应用程序,它们通过调用驱动程序提供的接口,实现各种功能和业务逻辑。应用程序可以根据具体的需求进行定制和开发,实现各种功能,如数据采集、图像处理、网络通信等。 嵌入式Linux三级系统的设计目标是在持精简、高效和可定制化的基础上,提供对硬件的支持和驱动,以及便于应用程序开发的接口和功能。这样,嵌入式系统开发者可以根据自己的硬件选型和需求,选择合适的硬件级、驱动级和应用级组件,定制开发出适合自己应用场景的嵌入式系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值