校验:非空、唯一性等校验
密码的加密:密码加密来存储。
如何做https的访问

校验

一个层面是接口层面,另外一个层面是数据库层面。

Springboot给我们提供了简单的封装

校验的包里面还有其他的注解。

IDEA里面鼠标选中按住Ctrl键盘直接跳到注解的包下面

然后在参数之前加上注解。@Validated 表示传进来的这个UserInfo需要去做校验

运行程序查看效果

详细的错误信息

用户名和密码都去掉

返回的errors就是一个数组

  1. {
  2. "timestamp": "2019-12-11T08:34:27.894+0000",
  3. "status": ,
  4. "error": "Bad Request",
  5. "errors": [
  6. {
  7. "codes": [
  8. "NotBlank.userInfo.password",
  9. "NotBlank.password",
  10. "NotBlank.java.lang.String",
  11. "NotBlank"
  12. ],
  13. "arguments": [
  14. {
  15. "codes": [
  16. "userInfo.password",
  17. "password"
  18. ],
  19. "arguments": null,
  20. "defaultMessage": "password",
  21. "code": "password"
  22. }
  23. ],
  24. "defaultMessage": "密码不能为空",
  25. "objectName": "userInfo",
  26. "field": "password",
  27. "rejectedValue": "",
  28. "bindingFailure": false,
  29. "code": "NotBlank"
  30. },
  31. {
  32. "codes": [
  33. "NotBlank.userInfo.username",
  34. "NotBlank.username",
  35. "NotBlank.java.lang.String",
  36. "NotBlank"
  37. ],
  38. "arguments": [
  39. {
  40. "codes": [
  41. "userInfo.username",
  42. "username"
  43. ],
  44. "arguments": null,
  45. "defaultMessage": "username",
  46. "code": "username"
  47. }
  48. ],
  49. "defaultMessage": "用户名不能为空",
  50. "objectName": "userInfo",
  51. "field": "username",
  52. "rejectedValue": "",
  53. "bindingFailure": false,
  54. "code": "NotBlank"
  55. }
  56. ],
  57. "message": "Validation failed for object='userInfo'. Error count: 2",
  58. "path": "/users"
  59. }

postman里面的设置

Content-Type:application/json

{"name":"jojo","username":"","password":""}

数据库层面的校验

数据库的实体类也要加上非空的注解。

因为传进来的数据 经过Service层的业务逻辑,可以能会做一些修改后再保存到数据库内,所以数据库也要做校验。
例如下面 接收的参数属性拷贝到user对象后, 如果又设置了userName为null,那么保存插入的数据就会有问题。

  1.  
  1. @PostMapping
    public UserInfo create(@RequestBody @Validated UserInfo info){
    User user=new User();
    BeanUtils.copyProperties(info,user);
    user.setUsername(null);
  2.  
  3. userRepository.save(user);
    info.setId(user.getId());
    return info;
    }
  1.  

再次测试,用户名和密码都填好后。

返回的500,。是服务器内部处理的错误

  1. {
  2. "timestamp": "2019-12-11T08:47:21.469+0000",
  3. "status": ,
  4. "error": "Internal Server Error",
  5. "message": "Validation failed for classes [com.imooc.security.user.User] during persist time for groups [javax.validation.groups.Default, ]\nList of constraint violations:[\n\tConstraintViolationImpl{interpolatedMessage='用户名不能为null', propertyPath=username, rootBeanClass=class com.imooc.security.user.User, messageTemplate='用户名不能为null'}\n]",
  6. "path": "/users"
  7. }

用户名不能重复的问题、@Column注解里面。unique注解

数据库内把表的username删除掉。SpringBoot的项目启动后,JPA会自动同步 User类的字段到数据库内。发现缺少了username字段,就创建上。

JPA会自动同步你的对象和数据库的表,但是他会去做判断,如果你的数据库内已经有了一个同名的字段username,他就不会再去改变数据库已有的字段。我们把username删掉了 他会重新去创建这个字段,并按照实体类的规则去创建。

启动服务。日志内去创建了username这个字段。

保证用户名的唯一性。

把数据库库内的数据清理一下 ,剩下一条用户数据

把设置为空的这行代码删掉,。

  1. {
  2. "timestamp": "2019-12-11T08:56:55.356+0000",
  3. "status": ,
  4. "error": "Internal Server Error",
  5. "message": "could not execute statement; SQL [n/a]; constraint [UK_sb8bbouer5wak8vyiiy4pf2bx]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement",
  6. "path": "/users"
  7. }

这个就是数据库的常见的校验

@NotBlank和nullable设置为true这两个的区别。
@NotBlank这是应用级,框架层面的校验,不管你数据库底层数据库字段是空的还是非空的,在应用层面他都回去做校验。sql执行之前去做校验。
@Column的nullable是在建数据库的时候,把这列设置为非空了。就是数据库内这个字段不能为空

如果去掉了nullable那么数据库内是可为空的。只不过NotBlank会在框架层面去校验非空

结束

Spring cloud微服务安全实战-3-6API安全机制之数据校验的更多相关文章

  1. Spring cloud微服务安全实战-3-4 API安全机制之认证(1)

    本节开始讲认证相关的东西.注意事项,出现问题的对应的解决方案. 先写用户注册的服务,注册一些用户信息进去.注册也是我们安全体系的一部分 注册 UserController里面的create方法 先修改 ...

  2. Spring cloud微服务安全实战-3-3 API安全机制之流控

    首先要保证你的服务是可用的,其中一个重要的手段就是流控.就是流量控制.比如我的系统每秒只能处理500个请求,那么多余的请求就拒绝掉.这样我的系统不会被压死 实际的开发中,所要面对的流控场景实际是非常复 ...

  3. Spring cloud微服务安全实战-3-5 API安全机制之认证(2)

    基于Http协议的认证方式有很多.本节我们只讲一个最简单的HttpBasic认证.聪明就可以看出来,这是一个最基础的认证,好处是简单方便,所有的主流浏览器都支持,问题就是并不是非常安全的,但是帮我们大 ...

  4. Spring cloud微服务安全实战_汇总

    Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...

  5. 《Spring Cloud微服务 入门 实战与进阶》

    很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...

  6. Spring Cloud微服务安全实战_00_前言

    一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介:  二.最终形成的架 ...

  7. Spring Cloud微服务安全实战_4-5_搭建OAuth2资源服务器

    上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后, ...

  8. Spring Cloud微服务安全实战_4-3_订单微服务&价格微服务

    实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xml ...

  9. Spring cloud微服务安全实战 最新完整教程

    课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...

  10. Spring cloud微服务安全实战-6-8sentinel限流实战

    阿里2018年开源的. 简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉.保证服务高可用. 流控 先从最简单的场景来入手. 1.引用一个依赖, 2,声明一个资源. 3.声明一个规则 注意 ...

随机推荐

  1. 《BUG创造队》作业8:软件测试与Alpha冲刺(第二天)

    项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 BUG创造队 作业学习目标 (1)掌握软件测试基础技术.(2)学习 ...

  2. python实现抖音多线程下载无水印视频【附源码】

    昨天发了一个无水印解析,评论说想要多线程下载,还是比较简单的. py文件同目录下创建url.txt,把链接一行一行复制进去,就能批量下载. 代码中的延时不能去掉,由于是多线程,速度较快,延时很重要. ...

  3. scala 中的集合类

    集合最重要的继承路线 —— Traversable -> Iterable -> Seq -> LinerSeq -> List Traversable 中的公有方法: 分类 ...

  4. 适合于做项目与团队管理的工具(Choerodon)

    官网链接:http://choerodon.io/zh/ 此处不做太多的介绍,需要了解的朋友进入官网进行查看. Choerodon猪齿鱼开源多云技术平台,是基于开源技术Kubernetes,Istio ...

  5. docker相关的一些指令

    1. docker cp [容器id]:[容器文件的路径] [宿主机文件的路径] 2. docker exec -it [容器id] /bin/bash 3. docker commit -a [作者 ...

  6. 【学习笔记】Baby Step Giant Step算法及其扩展

    1. 引入 Baby Step Giant Step算法(简称BSGS),用于求解形如\(a^x\equiv b\pmod p\)(\(a,b,p\in \mathbb{N}\))的同余方程,即著名的 ...

  7. car购车翻译篇

    Sedans 4门轿车 si 运动型车,通常匹配6挡位变速箱 Coupes 双门,有少少跑车的含义 Hatchbacks 掀背   配置英语 Honda Sensing® Standard 感应标准, ...

  8. 数据结构实验之排序一:一趟快排( SDUT 3398)

    #include <stdio.h> #include <string.h> int a[110000]; void qusort(int l, int r, int a[]) ...

  9. php 数组元素加法

    <?php//添加一个元素 $dirs[] = '1location';//再次添加一个元素 $dirs[] = '2location';//第三次添加一个元素 $dirs[] = '3loca ...

  10. WEB甘特图(机器运行状态图)

    前台框架使用BootStrap轻量级框架AdminLTE 后台框架使用的是Spring.SpringMVC 初此使用数据库SQL Server故只能用JDBC连接 请勿见怪!jsp页面重复添加元素过多 ...