輕量級Web框架應用 第五周

2021-09-28 13:24:58 字數 2957 閱讀 9717

配置訪問限制

還記得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錯誤。通過使用訊息佇列,我們可...