先来写一些用户的基础数据的管理的api。就是用户的基本的增删改查。用spring boot可以很容易的写出这种api

首先新建maven的项目

依赖关系

引入依赖。用最新的spring boot

https://spring.io/projects


https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/reference/html/

https://docs.spring.io/spring-boot/docs/2.2.0.RELEASE/reference/html/using-spring-boot.html#using-boot-dependency-management
搜索关键字maven。找到这里

复制这段

复制到项目里pom.xml内。有了这个依赖。以后在引入各种依赖的时候就不用再去写版本号了。因为dependencyManagement已经替我们把版本号规定好了。

<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2..RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
 

我们要写一个web项目来提供http服务。输入starter-web来搜索

为什么eclipse能显示effective pom

https://zhidao.baidu.com/question/401757501.html
m4eclipse插件实现的。
获取maven完整/实际/生效(effective)的pom.xml文件
https://blog.csdn.net/iteye_15147/article/details/82567934

继续代码

搜到这个复制下来

拷贝到,dependencies这个标签里面

然后把版本号去掉

也可以去maven的仓库去查找starter-web

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

mevn仓库地址

https://mvnrepository.com/

开始web项目


新建一个包


创建启动类

新建user包



新加user类

user类里面有两个属性id和name

再搜索lombok的包,这里搜索一下

复制到项目,然后去掉版本号

@Data注解等价于加上这些注解。自动为这个pojo(持久化类)类里面的属性生成getter方法、setter方法、全参数的构造函数、覆盖Object里面的ToString方法、覆盖Equals和HashCode方法

使用IDEA的情况

IDEA的话必须按装一个lombok的插件

点进来进行安装

安装插件后,重启你的编辑器就可以了。这样就可以使用lombok里面的注解@Data了。

userController


先不写业务逻辑,先把所有的方法声明
增删改查的方法

查一组用户的方法

了解攻击

2017年top10的攻击

第一名是注入攻击。最常见的是sql注入。

例子演示sql注入攻击

引入jdbc

sql注入就肯定就需要做jdbc的操作。搜一下 jdbc的库。

已进入到我们的项目中,

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>


配置数据库相关的参数

现在用的驱动默认是MySql8的。所以下面用的这里的驱动名称要注意一下。叫做cj.jdbc.Driver 这个是MySql8的新的驱动类的名字

视频中的链接字符串:我用这个链接字符串连不上数据库

jdbc:mysql://localhost:3306/imooc-security?characterEncoding=utf8&characterSetResults=utf8&autoReconnect=true

后来网上搜索换成这个:可以成功链接到数据库

jdbc:mysql://localhost:3306/imooc-security?serverTimezone=UTC&characterEncoding=utf8&useSSL=true

spring:
application:
name: user-api
datasource:
url: jdbc:mysql://localhost:3306/imooc-security?serverTimezone=UTC&characterEncoding=utf8&useSSL=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver

搜索mysql的驱动也加上

最终保留

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

连接数据的时候遇到个问题:

The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone

通过百度解决了,连接字符串加一个serverTimezone=UTC,这是时区的问题。

建数据库表

就表字段

加几条测试数据

controller内数据库查询

查询user表,先注入jdbcTemplate


运行程序测试

在http的工具请求,http://localhost:8080/users?name=jojo 传入一个数据库内存在的用户

name不写是查不到东西


这样就把系统的所有用户都查询到了。这个是sql的注入工具

程序加断点跟踪。or 1=1是永远都满足的条件。

拼接的sql语句就是:

select id,name from user where name='' or = or name= ''

首先输入的参数要做输入的校验,写一个正则表达式去判断参数 。另外一种是控制数据库的用户的权限。
root用户什么都能干。应该用一个其他的用户 不能拥有所有数据库的权限。

用一些比较先进的数据库操作的库 例如JPA、 Mybatis。为什么不用Mybaits呢因为也有被sql注入的风险。使用的时候依然要有一些注意的事项。
JPA基本上没有这个风险。

使用Spring JPA

引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

配置文件内加上jpa相关的配置
如果在这个User对象里面加属性的话,会自动的往数据库内加字段。如果新建别的对象,那么数据库就会自动多出来一张表来。就会保持对象和数据库的同步。开发的时候挺方便的。但是一般生产的时候不要这么用。

在日志里可以看到JPA最终执行的sql

User类加上Entity注解,这样这个pojo类就和数据库的表做了绑定。

@Entity是这个包javax.persistence.Entity;下的

加一个@Id的注解直接告诉jpa。id这个属性书主键。

写一个接口。UserRepository。就是数据操作的对象。用来操作我们的User对象。操作User对象就是操作我们的User表。

继承这个接口,用来做一些动态的查询

创建一个基本的增删改查的接口。Long表示主键的类型

继续Controller代码

注入Repository

这个方法,我们直接把他声明在接口内


运行测试

执行结果为空


功能实现了 同时防止了sql注入攻击来盗取我们数据库内的数据

日志里面输出的sql语句

结束

Spring cloud微服务安全实战-3-2 第一个API及注入攻击防护的更多相关文章

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

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

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

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

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

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

  4. Spring cloud微服务安全实战-4-1章节概述

    过渡到复杂的微服务场景下面. 搭建起一个简单的微服务架构,一个网关,一个安全中心,两个微服务,然后会看到如何将安全相关的问题解构出来放在网关上. 然后与OAuth协议整合起来.

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

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

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

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

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

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

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

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

  9. Spring cloud微服务安全实战-6-4权限控制改造

    授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...

  10. Spring cloud微服务安全实战-6-2JWT认证之认证服务改造

    首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...

随机推荐

  1. 《你们都是魔鬼吗》团队作业Beta冲刺---第一天

    团队作业Beta冲刺 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 你们都是魔鬼吗 作业学习目标 (1)掌握软件黑盒测试技术:(2)学会编制软件 ...

  2. tomcat绑定项目classes路径

    在Host中加入如下内容: <Context path="" docBase="D:\svn\MainSource\WebRoot" debug=&quo ...

  3. LightOJ-1275-Internet Service Providers(数学)

    链接: https://vjudge.net/problem/LightOJ-1275 题意: A group of N Internet Service Provider companies (IS ...

  4. hello world 程序的生成过程

    一个c / c ++文件需要经过预先(预处理),编译(编译),编译(汇编)和链接(链接)等四步,才能生成可执行程序. 在日常编译中,通常“编译”统称这四步: gcc -c xxx .s:汇编 gcc ...

  5. easyui-datagrid统计

    <script> //打印指定的table function dayin() { var tableToPrint = document.getElementById("dg&q ...

  6. 10分钟用Python告诉你两个机器人聊天能聊出什么火花

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 现在不是讲各种各样的人工智能嘛,AI下棋,AI客服,AI玩家--其实我一直很好奇,两个AI碰上会怎样,比如一起下棋,一起打游戏-- 今天做个 ...

  7. AtCoder Grand Contest 011题解

    传送门 \(A\) 直接按时间排序之后贪心就可以了 const int N=1e5+5; int a[N],q[N],c,k,h,t,n,res; inline int min(R int x,R i ...

  8. linux系统下常用的打包/解压缩包命令

    此处大概列了常用的解压和打包命令,详细信息需要百度一一对比他们的区别,比如我们在下载软件时就是最好的实践. 用zip举例说明,使用命令压缩时有点是,压缩文件.目录会非常快:如图,我压缩了一个progr ...

  9. Pytest权威教程03-原有TestSuite的执行方法

    目录 原有TestSuite的执行方法 使用pytest运行已存在的测试套件(test suite) 返回: Pytest权威教程 原有TestSuite的执行方法 Pytest可以与大多数现有的测试 ...

  10. 模板 - 数学 - 同余 - 扩展Euclid算法

    普通的扩展欧几里得算法,通过了洛谷的扩展欧几里得算法找乘法逆元.修复了容易溢出的bug,虽然新版本仍有可能会溢出longlong,假如参与运算的数字都是longlong,假如可以的话直接使用__int ...