先來寫一些用戶的基礎數據的管理的api。就是用戶的基本的增刪改查。用spring boot能夠很容易的寫出這種api
首先新建maven的項目
html
引入依賴。用最新的spring boot
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已經替咱們把版本號規定好了。
mysql
<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來搜索
web
https://zhidao.baidu.com/question/401757501.html
m4eclipse插件實現的。
獲取maven完整/實際/生效(effective)的pom.xml文件
https://blog.csdn.net/iteye_15147/article/details/82567934正則表達式
搜到這個複製下來
拷貝到,dependencies這個標籤裏面
而後把版本號去掉
spring
新建一個包
建立啓動類
sql
新加user類
user類裏面有兩個屬性id和name
再搜索lombok的包,這裏搜索一下
複製到項目,而後去掉版本號
@Data註解等價於加上這些註解。自動爲這個pojo(持久化類)類裏面的屬性生成getter方法、setter方法、全參數的構造函數、覆蓋Object裏面的ToString方法、副高Equals和HashCode方法
數據庫
先不寫業務邏輯,先把全部的方法聲明
增刪改查的方法
查一組用戶的方法
api
2017年top10的攻擊
第一名是注入攻擊。最多見的是sql注入。eclipse
sql注入就確定就須要作jdbc的操做。搜一下 jdbc的庫。
配置數據庫相關的參數
如今用的驅動默認是MySql8的。因此下面用的這裏的驅動名稱要注意一下。叫作cj.jdbc.Driver 這個是MySql8的新的驅動類的名字
搜索mysql的驅動也加上
最終保留
maven
就表字段
加幾條測試數據
查詢user表,先注入jdbcTemplate
運行程序測試
在http的工具請求
name不寫是查不到東西
這樣就把系統的全部用戶都查詢到了。這個是sql的注入工具
程序加斷點跟蹤。or 1=1是永遠都知足的條件。
首先輸入的參數要作輸入的校驗,寫一個正則表達式去判斷參數 。另一種是控制數據庫的用戶的權限。
root用戶什麼都能幹。應該用一個其餘的用戶 不能擁有全部數據庫的權限。
用一些比較先進的數據庫操做的庫 例如JPA、 Mybatis。爲何不用Mybaits呢由於也有被sql注入的風險。使用的時候依然要有一些注意的事項。
JPA基本上沒有這個風險。
引入依賴
配置文件內加上jpa相關的配置
若是在這個User對象裏面加屬性的話,會自動的往數據庫內加字段。若是新建別的對象,那麼數據庫就會自動多出來一張表來。就會保持對象和數據庫的同步。開發的時候挺方便的。可是通常生產的時候不要這麼用。
在日誌裏能夠看到JPA最終執行的sql
User類加上Entity註解,這樣這個pojo類就和數據庫的表作了綁定。
加一個id直接告訴jpa。id這個屬性書主鍵。
寫一個接口。UserRepository。就是數據操做的對象。用來操做咱們的User對象。操做User對象就是操做咱們的User表。
繼承這個接口,用來作一些動態的查詢
建立一個基本的增刪改查的接口。Long表示主鍵的類型
注入Repository
執行結果爲空
功能實現了 同時防止了sql注入攻擊來盜取咱們數據庫內的數據
日誌裏面輸出的sql語句