前言网上关于实操性的文章普遍大部分都记录不全,要么只记录重点部分,对于刚学习的小伙伴来说看起来是比较困难的所以,基于这一点。该文章会详细介绍使用SpringBoot整合阿里云短信服务的每一步过程,同时会将验证码存放到Redis中并设置过期时间,尽量保证实战的同时也让没做过的同学也能实现发短信的功能~ 文章目录前言1、开通阿里云短信服务2、整合短信服务到项目中3、测试总结 关于阿里云短信服务介绍就不
# Java接口sign ## 引言 在互联网应用中,数据的安全性是至关重要的。为了确保数据的完整性和真实性,我们通常会对数据进行签名和操作。本文将重点介绍在Java中,如何使用接口进行sign。 ## 什么是sign sign(签名)是指通过特定的算法,对数据进行加密生成一段唯一的标识,用于验证数据的完整性和真实性。(验证签名)则是指对接收到的数据进行解密和验证,确保
原创 2023-11-20 12:33:55
535阅读
百家饭平台是我们团队研发的,OpenAPI的编辑、测试、代码生成的工具,我们将围绕OpenAPI做一系列的介绍文章。如果没有特殊声明,介绍的OpenAPI标准以v3.1.0版本为主。API的认知方法浅谈JWT认知上周介绍了API认证方法在OpenAPI标准中的定义,其中提到JWT认证是Bearer认证的一种,主要表现形式是在头部的Authorization字段Bearer ....的加密内容构
注解,和反射一样,是Java中最重要却最容易被人遗忘的知识点。哪怕Spring、SpringMVC、SpringBoot等框架中充满了注解,我们还是选择性地忽视它。很多人不明白它是怎么起作用的,甚至有人把它和注释混淆...工作中也只是机械性地在Controller上加@RequestMapping。是的,我们太习以为常了,以至于觉得它应该就是如此。内容介绍:两件小事注解的作用注解的本质反射注解信息
在系列(4)、(5)中我们展示了如何绑定数据,绑定完数据之后如何确保我们得到的数据的正确性?这就是我们本篇要说的内容 —> 数据验证。这里我们采用Hibernate-validator来进行验证,Hibernate-validator实现了JSR-303验证框架支持注解风格的验证。首先我们要到http://hibernate.org/validator/下载需要的jar包,这里以4.3.1.
前言在公司很多接口项目中,都要会有一些签名认证,签名认证的目的很简单,就是为了保护接口,不让别人调用,可能很多初学者没有对签名认证的一个概念,我现在大致可以讲一下签名认证的概念。 如果你写的接口没有签名认证,那么无论是谁都可以进行调用,只要url路劲是对的就行了,参数也没有限制,那么这个时候,签名认证就出现了,sign也是会通过参数进行传递,sign的规则可以随便定义,我现在的规则是这样子的 ur
转载 2024-06-12 15:45:15
747阅读
上文我们讨论了spring-boot如何去获取前端传递过来的参数,那传递过来总不能直接使用,需要对这些参数进行校验,符合程序的要求才会进行下一步的处理,所以本篇文章我们主要讨论spring-boot中如何进行参数校验。lombok使用介绍在介绍参数校验之前,先来了解一下lombok的使用,因为在接下来的实例中或有不少的对象创建,但是又不想写那么多的getter和setter,所以先介
前言Spring框架作为当前最流行的JavaEE框架之一,简化了代码,提升了性能。而在这其中最主要的技术就是依赖注入了。所谓依赖注入,就是创建被调用者的工作由spring来完成,然后将其注入调用者。本篇主要介绍了依赖注入和控制反转,并分析了上一篇中,依赖注入的代码实现原理。关于BeanBean的特点:生命周期较长在整个虚拟机内可见维护成本高,单例存在Bean优势运行期效率高统一维护,便于管理和扩展
ps:通过springboot自定义注解实现的加功能,不过很多容易遇坑的地方.所需pom.xml中的jar包:<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId>
Sign签名存在目的:为了防止不法分子修改参数数据,进而攻击服务器,导致数据泄露或从中获得利益例如:一个接口是用户把积分转帐给他的朋友,修改后,变为转帐到攻击者的帐户,这样,攻击者就能得到利益啦  Sign执行流程:  客户端:当客户请求服务器前,会定义请求参数,通过这些参数,会生成一个Sign签名,生成签名之后,和参数一起放进请求头里,传给服务器;  服务器:接收到传过来的请
# Java SM2Sign_with_SM3 实现流程 ## 流程概览 下面是实现 Java SM2Sign_with_SM3 的整个流程: | 步骤 | 描述 | | --- | --- | | 1 | 获取待签名的数据 | | 2 | 生成 SM2 密钥对 | | 3 | 使用私钥对数据进行签名 | | 4 | 使用公钥对签名结果进行 | | 5 | 判断结果是否一
原创 2023-07-27 13:22:43
6087阅读
前言作为后端来讲,对于前端传来的数据,需要保持高度的警惕。避免出现异常数据,导致系统异常。统一参数校验和自定义校验注解,可以帮助我们更加优雅和严格的完成参数校验,减少出错的概率。/** * 账户名 */ @Email(message = "邮箱格式有误") @NotBlank(message = "账户名称不能为空") @ApiModelProperty
转载 2024-03-20 14:18:57
47阅读
前言现在越来越多的公司以 API 的形式对外提供服务,这些 API 接口大多暴露在公网上,所以安全性就变的很重要了。最直接的风险如下:非法使用 API 服务。(收费接口非法调用)恶意攻击和破坏。(数据篡改、DOS)因此需要设计一些接口安全保护的方式来增强接口安全,在运输层可添加 SSL 证书,上 HTTPS,在应用层主要是通过一些加密逻辑来实现。目前主流的两种是在 HTTP Header 里加认证
转载 2024-05-22 12:05:15
698阅读
SpringBoot检验注解@Null 限制只能为null。 @NotNull 限制必须不为null。 @NotEmpty 只作用于字符串类型,字符串不为空,并且长度不为0。 @NotBlank 只作用于字符串类型,字符串不为空,并且trim()后不为空串。 @AssertFalse 限制必须为false。 @AssertTrue 限制必须为true。 @DecimalMax(value) 限制必
写的很好,就做个笔记了。感谢作者! 项目中常用的API接口签名验证方法:1. 给app分配对应的key、secret2. Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下:   a. 按照请求参数名称将所有请求参数按照字母先后顺序排序得到:keyvaluekeyvalue...keyvalue  字符串如:将arong=1,mrong=2,crong=3 排序为:a
转载 2023-08-03 08:42:09
382阅读
到了新公司后的第一个需求就是对内容做一个加,然后传给上游,上游客户端进行。需求看似简单,也确实简单,但是,背后的知识足够开一门课程、写一篇论文了,这里笔者用这样一个专题来简要整理一下相关的知识。首先明确几个名词:加密:发送方利用接收方的公钥对要发送的明文进行加密。解密:接受方利用自己的私钥进行解密。公钥和私钥配对的,用公钥加密的文件,只有对应的私钥才能解密。当然也可以反过来,用私钥加密,用对
事务事务的特性(ACID)原子性(Atomicity)原子性要求事务所包含的全部操作是一个不可分割的整体,这些操作要么全部提交成功,要么只要其中一个操作失败,就全部“成仁”一致性(Consistency)一致性要求事务所包含的操作不能违反数据资源的一致性检查,数据资源在事务执行之前处于一个数据的一致性状态,那么,事务执行之后也需要依然保持数据间的一致性状态隔离性(ISOlation)事务的隔离性主
:  背景:    在实际工作中,有些敏感接口如支付接口,接口定义了一个入参为auth,在请求接口时,必须传入正确的auth,接口才会返回正确的数据,否则不处理,目的是为了加强接口的安全性   原理:    每次发送请求时都需要携带一个参数,可能是header里面传,也可能是在body里面,一般定义名为auth    根据提供的算法,生成一个签名,每次请求的时候带上这个签名,后端验证
转载 2023-07-28 16:28:19
388阅读
1.非对称加密RSA是一种非对称加密算法。由消息接收者将公钥发送给消息发送者,使用容易被截获的公钥来加密;把私钥一直保存在消息的接收者处,使用不容易被截获的私钥来解密。这样即使攻击者截获了公钥也无法获取加密后的内容。这种算法还可以用于数字签名。使用发送端的私钥来加密数字签名,使用发送端传输给目标端的公钥来解密数字签名,如果解密成功,证明消息发送端是可靠的。而因为私钥难以获取,攻击者也难以用共钥伪造
转载 2024-04-20 18:09:49
23阅读
notify失败首先排除以下的错误原因:同步回调成功,但是异步通知就失败了,将获取的params参数打印出来,发现是一个subject参数居然是??;初步判断就是这个subject的问题。然后网上一堆不是我这个原因的,最后各种尝试,浪费两小时,记录下来希望有同样问题的人快速解决问题。我的问题从这个博客上得到解决。 将下载的demo中的乱码解决这一行删除 然后就可以执行异步回调了,这个时候我们s
  • 1
  • 2
  • 3
  • 4
  • 5