- spring boot
-
一、背景
前后端分離已經(jīng)成為互聯(lián)網(wǎng)項(xiàng)目開發(fā)標(biāo)準(zhǔn),它會(huì)為以后的大型分布式架構(gòu)打下基礎(chǔ)。SpringBoot使編碼配置部署都變得簡(jiǎn)單,越來越多的互聯(lián)網(wǎng)公司已經(jīng)選擇SpringBoot作為微服務(wù)的入門級(jí)微框架。
Mybatis-Plus是一個(gè) Mybatis 的增強(qiáng)工具,有代碼生成器,并且提供了類似hibernate的單表CRUD操作,又保留了mybatis的特性支持定制化 SQL。
Apache Shiro是一款強(qiáng)大易用的Java安全框架,Java官方推薦使用Shiro,它比Spring Security更簡(jiǎn)單易用,Spring自己的系列Spring side4也把權(quán)限擴(kuò)建換成Shiro了。
現(xiàn)在API越來越流行,如何安全保護(hù)這些API? JSON Web Tokens(JWT)能提供基于JSON格式的安全認(rèn)證。JWT可以跨不同語言,自帶身份信息,并且非常容易傳遞。
二、項(xiàng)目特性
1.自定義@Log注解自動(dòng)記錄日志到數(shù)據(jù)庫。
2.自定義@Pass注解接口不用進(jìn)行認(rèn)證身份。
3.使用JSONObject統(tǒng)一獲取body請(qǐng)求參數(shù),減少實(shí)體類的數(shù)量。完成自定義@ValidationParam注解驗(yàn)證請(qǐng)求參數(shù)是否為空。
4.使用bcrypt算法加密密碼,著名代碼托管網(wǎng)站Github和美國軍方防火墻同樣采用此算法,靠bcrypt算法會(huì)成功保住密碼強(qiáng)度不算很高的大部分賬戶。
5.搭配Shiro注解配置權(quán)限,高度靈活,提供按鈕級(jí)別的權(quán)限控制,后端接口只驗(yàn)證權(quán)限,不看角色。用自定義@CurrentUser注解獲取當(dāng)前登錄用戶,Controlle層統(tǒng)一異常處理:
6.用SpringAOP切面編程進(jìn)行聲明式事務(wù),過濾請(qǐng)求參數(shù),防止XSS攻擊。
7.使用POST請(qǐng)求登錄返回token和權(quán)限信息,保證請(qǐng)求無狀態(tài),返回實(shí)體如果屬性為空不顯示。
三、程序邏輯
1.填寫用戶名密碼用POST請(qǐng)求訪問/login接口,返回token令牌等信息,失敗則直接跳轉(zhuǎn)401錯(cuò)誤頁面。
2.在之后需要驗(yàn)證身份的請(qǐng)求的Headers中添加Authorization和登錄時(shí)返回的token令牌。
3.服務(wù)端進(jìn)行token認(rèn)證,失敗跳轉(zhuǎn)401頁面。
4.用jwt做認(rèn)證(登錄),Shiro做授權(quán)。
四、運(yùn)行項(xiàng)目
項(xiàng)目結(jié)構(gòu):
-
通過git下載源碼,本項(xiàng)目基于JDK1.8
-
采用Maven項(xiàng)目管理,模塊化,導(dǎo)入IDE時(shí)直接選定liugh-parent的pom導(dǎo)入
-
創(chuàng)建數(shù)據(jù)庫liugh,數(shù)據(jù)庫編碼為UTF-8,執(zhí)行l(wèi)iugh.sql文件,初始化數(shù)據(jù)
-
修改application-dev.properties,更新MySQL賬號(hào)和密碼
-
Eclipse、IDEA運(yùn)行SpringbootApplication.java,則可啟動(dòng)項(xiàng)目
-
訪問登錄接口:localhost:8081/login
-
賬號(hào)密碼:123456/123
-
獲取token訪問其他接口
-
運(yùn)行截圖:
-
-