Spring Bean配置錯誤導致HTTP 500

2022-07-30 05:57:16 字數 1620 閱讀 5658

用超級使用者能成功登入系統,用普通賬號在登入系統跳轉到錯誤處理頁面,檢查後台卻沒有任何錯誤。百思不得其解。懷疑問題可能是如下2個原因造成的:

普通賬號沒有相關的許可權?

spring security的配置不正確

經過詳細檢查後,排除了上面的兩個原因。系統在web.xml裡配置了如下的錯誤處理頁面:

1

<

error-page

>

2<

error-code

>400

error-code

>

3<

location

>/login/exception.jsp

location

>

4error-page

>

5<

error-page

>

6<

error-code

>403

error-code

>

7<

location

>/login/exception.jsp

location

>

8error-page

>

9<

error-page

>

10<

error-code

>404

error-code

>

11<

location

>/login/login.jsp

location

>

12error-page

>

13<

error-page

>

14<

error-code

>500

error-code

>

15<

location

>/login/exception.jsp

location

>

16error-page

>

為了顯示出系統的詳細錯誤資訊,我們暫時將如上的部分去掉了,重啟伺服器,再次登入,錯誤堆疊被完整的顯示出來了,原來是spring在建立乙個bean的時候,找不到屬性的access method報錯了,導致http 500錯誤。

回過頭來看,為什麼超級管理員就能登入呢?是因為超級管理員登入時,系統會自動跳轉到管理頁面,與普通賬號登入後觸發的系統邏輯不一樣,spring在這個時候並沒有建立我們上面提到的bean。

為什麼spring建立的bean報錯時,後台沒有錯誤呢?我們的log error日誌已經開啟。猜測可能的原因是spring在建立bean錯誤的時候並沒有將這個錯誤資訊輸出到控制台。這個有待驗證。 那麼能否獲取到這個錯誤堆疊資訊,然後展現在我們的錯誤處理頁面呢?這個也有待驗證。

從這個例子可以看出:

1. 在開發階段,有可能出現配置錯誤或程式錯誤的時候,我們應該去掉錯誤處理頁面對映,讓錯誤資訊原形畢露。

2. spring並不是在context loader載入的時候會建立bean,在初始化context loader的時候,spring會做一些校驗,載入class, 但並不會建立bean,這個可以在某個bean的建構函式裡加一段輸出來驗證。 

Nginx 配置錯誤導致漏洞

crlf是 回車 換行 r n 的簡稱,即我們都知道在http協議中,http header與http body是用兩個crlf分隔的,瀏覽器就是根據這兩個crlf來提取http 內容 一旦我們能夠控制http頭,通過注入一些crlf這樣就可以控制header和body的分割線,這樣我們就可以向bo...

Nginx 配置錯誤導致漏洞

好好學習,天天向上 由於一些不安全的配置引起的漏洞 無這裡使用1版本 使用vulhub 使用docker啟動 docker compose build docker compose up d 執行成功後,nginx將會監聽8080 8081 8082三個埠,分別對應三種漏洞。nginx會將 uri進...

Druid配置錯誤導致未授權訪問漏洞

在使用xray掃瞄時發現了下圖所示漏洞,經過查閱資料發現為druid的未授權訪問漏洞。druid是阿里巴巴資料庫出品的,為監控而生的資料庫連線池,並且druid提供的監控功能,監控sql的執行時間 監控web uri的請求 session監控,首先druid是不存在什麼漏洞的。但當開發者配置不當時就...