数据校验

Spring Boot 校验参数

大城市里の小女人 提交于 2019-12-13 09:59:19
做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的。如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量的 IF ELSE 就比如下面这样: 这个例子只是校验了一下空参数。如果需要验证邮箱格式和手机号格式校验的话代码会更多,所以介绍一下 validator 通过注解的方式进行校验参数。 什么是Validator Bean Validation是Java定义的一套基于注解的数据校验规范,目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本,再到JSR 380的2.0版本(2.0完成于2017.08),已经经历了三个版本 。在 SpringBoot 中已经集成在 starter-web 中,所以无需在添加其他依赖。 注解介绍 validator内置注解 注解 详细信息 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse 被注释的元素必须为 false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value)

SpringBoot如何优雅的校验参数

*爱你&永不变心* 提交于 2019-12-13 02:02:26
前言 做web开发有一点很烦人就是要校验参数,基本上每个接口都要对参数进行校验,比如一些格式校验 非空校验都是必不可少的。如果参数比较少的话还是容易 处理的一但参数比较多了的话代码中就会出现大量的 IF ELSE 就比如下面这样: 这个例子只是校验了一下空参数。如果需要验证邮箱格式和手机号格式校验的话代码会更多,所以介绍一下 validator 通过注解的方式进行校验参数。 什么是Validator Bean Validation是Java定义的一套基于注解的数据校验规范,目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本,再到JSR 380的2.0版本(2.0完成于2017.08),已经经历了三个版本 。在 SpringBoot 中已经集成在 starter-web 中,所以无需在添加其他依赖。 注解介绍 validator内置注解 注解 详细信息 @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse 被注释的元素必须为 false @Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value)

CRC检验码计算——C语言(CRC8/16/32)

自闭症网瘾萝莉.ら 提交于 2019-12-12 13:52:47
1、基本概念 1.1、循环冗余检测(Cyclic Redundancy Check,CRC) CRC编码也被称为多项式编码(polynomial code),因为该编码能够将要发送的比特串看作是系数为 0 和 1 的一个多项式。对比特串操作被解释为多项式算术。 1.2、CRC参数 D:D数据拥有 d 比特 G:发送方和接收方需要协商一个 r+1 比特模式,称为生成多项式(G), G 的最高有效位比特(最高位)和 最低有效位比特(最低位)必须为 1 R:发送方选择 r 个附加比特,称为 R(CRC校验码) (1) 计算 :R 是数据 D 通过 模 2 除法 除 G 运算得到的(姑且这么说)余数, 这个 R 就是 FCS(检测帧序列) ,发送时把 R 附加到数据 D 后面。 (2) 检验 :一共接收有 d+r 个比特,用模 2 算术恰好能够被 G 整除(没有余数),即 (D+R)/ G,如果余数为 0,接收方认为数据正确而被接收,否则接收方知道出现了差错。 1.3、CRC原理解释 所有 CRC 计算采用模 2 算术,即在加法中不进位,在减法中不借位,意味加法和减法是相同的, 等价于操作数的按位异或(XOR)运算 ,而不是需要借位运算。 例如: D = 10110011,d = 8 G = 11001,r = 4 通过计算得到 R = 0100 在这种情况下传输 12 个比特是

简单理解海明校验码

戏子无情 提交于 2019-12-11 10:36:41
转自: http://baijiahao.baidu.com/s?id=1598006039749022275&wfr=spider&for=pc 二进制数据经过传送、存取等环节,会发生误码(1变成0或0变成1),这就有如何发现及纠正误码的问题。所有解决此类问题的方法就是在原始数据(数码位)基础上增加几位校验位。我们常使用的检验码有三种. 分别是奇偶校验码、海明校验码和循环冗余校验码(CRC)。 海明校验码是由RichardHamming于1950年提出、目前还被广泛采用的一种很有效的校验方法。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。但是因为这种海明校验的方法 只能检测和纠正一位出错 的情况。所以如果有多个错误,就不能查出了。 什么是码距? 两个码组对应位上数值不同的个数称为码组的距离,简称码距,又称海明(Hamming)距离。例如: 码值1 00110 12345 Caus 码值2 00100 13344 Daun 码距 1 2 2 海明校验码公式(假设为k个数据位设置r个校验位): 2^r - 1 ≥ k + r 公式怎么得出来的呢

python3 marshmallow学习

元气小坏坏 提交于 2019-12-10 16:23:23
python3 marshmallow学习 官方文档: https://marshmallow.readthedocs.io/en/stable/ 安装: pip install -U marshmallow Object -> dict 1 简单的例子 from marshmallow import Schema, fields class UserSchema(Schema): name = fields.String() email = fields.Email() age = fields.Integer() create_at = fields.DateTime(dump_only=True) class User: def __init__(self, *, name, email, age): self.name = name self.email = email self.age = age zhuyu = User(name="朱宇", email="33333@qq.com", age=22) user_schema = UserSchema() result = user_schema.dump(zhuyu, many=False) print(result,isinstance(result, dict)) # {'age': 22, 'name': '朱宇

day57总结

无人久伴 提交于 2019-12-09 16:52:09
目录 表的多对多关系的三种创建方式 查阅框架文档及百度案例: 全自动创建 纯手撸(了解) 半自动(推荐使用) forms组件简介 forms组件的作用 forms组件校验数据 forms组件渲染标签 forms组件渲染标签方式一 forms组件渲染标签方式二 form组件展示信息 forms组件自定义校验 正则校验 钩子函数 局部钩子: 校验单个字段 全局钩子: 校验多个字段 其他字段及参数 需要掌握 了解, 会copy即可 表的多对多关系的三种创建方式 查阅框架文档及百度案例: 基于人家已经写好的功能修改 先看配置参数 前期就是猜, 改几个参数看结果, 看猜的是否对 整体修改 全自动创建 class Books(models.Model): title = models.CharField(max_length=32) authors = models.ManyToManyField(to='Authors') class Authors(models.Model): name = models.CharField(max_length=32) 优点: 1. 不需要手动操作关系表, 全部由orm自动创建; 2. 并且内置了四个操作关系表的方法(add, remove, set, clear) 缺点: 自动创建的关系表无法扩展和修改字段 纯手撸(了解) class Books

海明码校验程序设计

六月ゝ 毕业季﹏ 提交于 2019-12-09 14:23:38
1. 需求分析 (1)海明码编码: 输入:一串二进制数据串 输出:插入海明码后的二进制数据串 (2)海明码纠错: 输入:一串含海明码的二进制数据串 输出:通过海明码校验,检查该二进制串是否有错,若有错误,则对错误位进行纠错,将纠错后的二进制串输出。 2. 海明码校验原理分析 这里我们仅从编程实现的角度分析海明码的编码及纠错的实现算法,书本上采用的是矩阵相乘的方法,但矩阵相乘的方法程序执行效率不高,故通过在网上的搜索及自己的总结,得出如下的程序实现算法。 2.1 海明码编码的原理分析 编码步骤 (1) 根据信息位数,确定校验位数。 k—信息位数 r—校验位数 求出满足不等式的最小r,即为校验位数。 (2)计算校验位公式 特别注意: 校验位 r n所在位数为 2^n ,其余由信息位填充。 位数和信息位由1起始,而校验位由0起始。 将每个信息比特由位置对应的位数写成2的幂之和的形式。 例如I8对应的第十二位12=2^3+2^2 ,I7对应的第十一位11=2^3+2^1+2^0 ,I6对应的第十位10=2^3+2^1,I5对应的第九位9=2^3+2^0 一直写到对应的第三位。 校验位r n由前面位数写成2的幂之和中包含2 ^n的位数对应的信息为之和构成 例如r3=I8+I7+I6+I5 (3)求校验位。 根据计算公式求出各校验位。 (4) 求海明码 根据上面的表格填充后,写出海明码。 例

SpringMVC常用注解和知识点总结

白昼怎懂夜的黑 提交于 2019-12-09 01:01:38
SpringMVC学习笔记 1:编写Helloworld程序心得: 1>首先我们要有@Controller注解的类,即表述层,该类中要含有@RequestMapping("")注解的方法,映射用户的 请求 ** * 1:使用RequestMapping("path"),用来映射请求的URL,path 表示的用户请求的地址 * 2:映射方法的返回值,会被视图解析器解析为实际的物理视图,具体过程如下 * 3:它会将该方法的返回值和视图解析器中的前缀和后缀一起组成一个新路径,并且转发到该页面下 * 前缀success后缀,即/WEB-INF/views/success.jsp * @return */ @RequestMapping("/hello world") public String hello(){ System.out.println("hello world"); return "success"; } 2>在web.xml文件中注册DispatcherServlet <servlet> <!--配置DispatcherServlet--> <servlet-name>SpringDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet<

Spring Cloud微服务安全实战_3-5_API安全之常见问题

本小妞迷上赌 提交于 2019-12-08 13:58:24
1,数据校验,解决接口层的参数校验,是api安全的前线。可以用JSR303注解进行接口层面的校验 ,参考文章: https://www.ibm.com/developerworks/cn/java/j-lo-jsr303/index.html 2,密码加密(这个不说了,有很多加密算法),解决数据存储层面的安全 3,Https访问,解决从client到服务端的传输安全 来源: https://www.cnblogs.com/lihaoyang/p/12003345.html

框架 day69 SpringMVC高级(Validation校验,数据回显,上传,json数据交互,RESTful支持,拦截器)

孤人 提交于 2019-12-08 07:49:37
第二天:高级知识 Validation校验方法(了解) 数据回显掌握 统一异常处理器掌握 上传图片(上传商品图片)掌握 json转换掌握 restFUL支持了解 拦截器掌握 1 注解开发-高级 1.1 Validation(了解) b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的,本节主要学习springmvc实现控制层添加校验。 Spring3支持JSR-303验证框架,JSR-303 是JAVA EE 6 中的一项子规范,叫做BeanValidation,官方参考实现是Hibernate Validator(与Hibernate ORM 没有关系),JSR 303 用于对Java Bean 中的字段的值进行验证。 1.1.1 需求 在商品信息修改提交时对商品信息内容进行校验,例如商品名称必须输入,价格合法性校验。 1.1.2 加入jar包 1.1.3 配置validator <!-- 校验器 --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <!-- 校验器--> <property name="providerClass"