配置訪問限制
還記得exclude = datasourceautoconfiguration.class
嗎?
在第三週_上裡, 我們報了乙個資料來源配置的錯誤(如下圖)
這個錯誤的原因主要有兩個可能性:
上週我們對shiro安全框架做了簡單的配置, 接下來我們要用上這個框架了!
還記得我們之前編寫過的乙個測試插入使用者資料的方法嗎? (見第四周)
在方法名上加上@rollback(value = false)
, 作用是讓資料庫在執行完測試後, 不執行回滾, 也就是會把我們測試用的插入資料保留下來
接下來我們執行一次測試, 如果測試通過的話, 可以看到使用者表中成功多了一條資料
現在我們的密碼在資料庫中就是經過加密後的密文, 沒有相應的認證來匹配是不行的
我們可以在shiroconfig中編寫乙個credentialsmatcher
方法來匹配, 並在我們的realm中用上它
還記得我們的登入介面嗎?
("/login"
)public resultjson login()
這裡只是簡單的做了個get方法, 並直接返回了資料, 接下來我們要完善這個介面
思路是這樣的:
將其改為post
例項化乙個usernamepasswordtoken
通過securityutils.getsubject()
乙個subject
利用subject.login()
對我們的token
進行認證
如果登入成功後, 會生成乙個session
根據認證的不同結果, 返回對應的資料 (
"/login"
)public resultjson login
(string username, string password)
else
* */
trycatch
(unknownaccountexception e)
catch
(incorrectcredential***ception e)
catch
(disabledaccountexception e)
catch
(exception e)
return resultjson;
}接下來可以啟動專案, 用swagger來做乙個測試
在前端頁面中, 我們可以通過頁面的跳轉, 和控制資料的顯示來對使用者的操作進行限制;
那麼如果後端的介面位址暴露了, 使用者就可以繞過前端頁面, 直接通過介面來對我們的資料庫進行操作;
這顯然是非常不安全的!!!
那麼我們在後端中就要實現對介面的訪問限制
首先我們先在usercontroller中定義三個介面
("/without_login"
)public resultjson withoutlogin()
("/unauthorized"
)public resultjson unauthorized()
在這裡我們傳遞了乙個token
引數, 並且在使用@requiresroles
註解, 來判斷使用者角色為admin或者manager的使用者可以操作此介面.
@apiimplicitparams()
("/adduser"
)@requiresroles
(value =
,logical = logical.or)
public resultjson adduser()
前面我們只新增了一條使用者的資料, 並沒有設定其角色
方便測試, 我又多加了兩條使用者資料
接著我們在角色表中插入三條角色資料
最後在使用者角色表中設定各個使用者的角色
開啟我們的shrioconfig
新增如下配置, 對應我們的介面操作的安全限制
最後來測試下把 !
登入介面中:
輸入錯誤的使用者名稱和密碼:
正確的時候:
對新增使用者介面進行操作
沒有傳遞token或傳遞錯誤的token時候
角色不為admin或manager時
成功時:
Web輕量級框架UIKit簡介
uikit的中文官網奉上 對於我們來說,前端的框架也是不陌生了,接觸過了esayui,mui和bootstrap的同學一定對於框架有了很多的了解,我們的應用也是無非在於把demo中的 copy過來在加上自己的修改就成了自己的東西了,關鍵就是要有自己的想法,因為框架提供的東西都是一些元件,我們需要發揮...
輕量級web框架 Flask 06
1.重定向 redirect 什麼是重定向 由伺服器通知瀏覽器向乙個新位址傳送請求 特點 產生兩次相應 2.orm操作 查詢 r db.session.query 查詢執行函式 查詢執行函式 all first first or 404 count 查詢過濾器函式 作用在db.session.que...
Web應用中的輕量級訊息佇列
web應用中為什麼會需要訊息佇列?主要原因是由於在高併發環境下,由於來不及同步處理,請求往往會發生堵塞,比如說,大量的insert,update之類的請求同時到達mysql,直接導致無數的行鎖表鎖,甚至最後請求會堆積過多,從而觸發too many connections錯誤。通過使用訊息佇列,我們可...