先來寫一些用戶的基礎數據的管理的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.0.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 1=1 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語句
結束