# 前後端分離中關於springSecurity使用的坑
1.問題拋出:當前後端未分離的時候,我們經常通過後端同時返回數據和頁面給前端,但是當前後端分離的時候,我們只能通過Json數據來進行前後端的交互,例如登錄授權過程,下面我來給大家講一個之前踩過的坑:
2.問題出現:前後端分離的登錄過程中,我們可以自定義拓展後端security框架內容實現根據不同的登錄情況進行不同的數據響應,例如登錄成功後我們通過實現AuthenticationSuccessHandler
接口對成功內容進行返回({"code":200,"msg":"登錄成功"})
;登錄失敗時通過實現AuthenticationFailureHandler
接口進行數據響應;但是有一種情況可能在前後端分離時出現:當我們未登錄,直接請求需要授權的資源時將被框架攔截,我們可以通過實現AuthenticationEntryPoint
接口中的commence
方法進行未登錄操作的數據響應即可,但是經常有朋友會出現postman調試成功,但是瀏覽器調試失敗,並且返回錯誤碼302,而ajax對302錯誤無感知,會將請求重定向到登錄接口的情況。
3.解決方式:一般錯誤的配置內容是在WebSecurityConfigurerAdapter配置類中添加如下配置:.httpBasic().authenticationEntryPoint(new AuthenticationEntryPoint())
,此配置在授權失敗的時候將出現重定向錯誤
正確的配置:.exceptionHandling().authenticationEntryPoint(new AuthenticationEntryPoint())
,使用這種配置前後端分離時未登錄時將得到後端的響應數據