springboot security之前后端分離配置方式
前言
spring boot security默認(rèn)配置有一個登錄頁面,當(dāng)采用前后端分離的場景下
需要解決兩個問題:
- 前端有自己的登錄頁面,不需要使用spring boot security默認(rèn)的登錄頁面
- 登錄相關(guān)接口允許匿名訪問
因此需要自定義相關(guān)實現(xiàn)。
自定義配置
自定義配置的核心實現(xiàn)如下:
@Component public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { // 在這里自定義配置 } }
如上示例代碼:
關(guān)鍵是重寫這個方法,spring boot security的擴展方法不只這一種,化繁為簡,盡量采用最簡單直白的方式。
認(rèn)證失敗自定義處理
當(dāng)請求認(rèn)證失敗的時候,可以返回一個401的狀態(tài)碼,這樣前端頁面可以根據(jù)響應(yīng)做相關(guān)處理,而不是出現(xiàn)默認(rèn)的登錄頁面或者登錄表單:
@Override protected void configure(HttpSecurity http) throws Exception { // 在這里自定義配置 http.authorizeRequests() .anyRequest() .authenticated() .and() .exceptionHandling() // 認(rèn)證失敗返回401狀態(tài)碼,前端頁面可以根據(jù)401狀態(tài)碼跳轉(zhuǎn)到登錄頁面 .authenticationEntryPoint((request, response, authException) -> response.sendError(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.getReasonPhrase())) .and().cors() // csrf是否決定禁用,請自行考量 .and().csrf().disable() // .antMatcher("/**") // 采用http 的基本認(rèn)證. .httpBasic(); }
登錄相關(guān)接口匿名訪問
登錄接口或者驗證碼需要匿名訪問,不應(yīng)該被攔截。
如下,提供獲取驗證碼和登錄的接口示例:
@RequestMapping("/login") @RestController public class LoginController { @PostMapping() public Object login() { return "login success"; } @GetMapping("/captcha") public Object captcha() { return "1234"; } }
配置允許訪問這部分接口:
@Override protected void configure(HttpSecurity http) throws Exception { // 在這里自定義配置 http.authorizeRequests() // 登錄相關(guān)接口都允許訪問 .antMatchers("/login/**").permitAll() // 還有其它接口就這樣繼續(xù)寫 .antMatchers("/other/**").permitAll() .anyRequest() .authenticated() ... 省略下面的 }
前置文章
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java如何將字符串String轉(zhuǎn)換為整型Int
這篇文章主要介紹了Java如何將字符串String轉(zhuǎn)換為整型Int,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08Java C++題解leetcode 1684統(tǒng)計一致字符串的數(shù)目示例
這篇文章主要為大家介紹了Java C++題解leetcode 1684統(tǒng)計一致字符串的數(shù)目示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Springboot基于enable模塊驅(qū)動的實現(xiàn)
這篇文章主要介紹了Springboot基于enable模塊驅(qū)動的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08SpringCloud3.x集成BigQuery的代碼實現(xiàn)
Google BigQuery 是一種高性能、可應(yīng)用于大數(shù)據(jù)分析的公主云數(shù)據(jù)庫服務(wù),Spring Cloud 提供了完善的工具和核心功能,可以進(jìn)行泛動分布應(yīng)用構(gòu)建,本文給大家介紹了SpringCloud3.x集成BigQuery的代碼實現(xiàn),需要的朋友可以參考下2025-01-01淺談Java中BIO、NIO和AIO的區(qū)別和應(yīng)用場景
這篇文章主要介紹了Java中BIO、NIO和AIO的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04詳解Java實現(xiàn)數(shù)據(jù)結(jié)構(gòu)之并查集
并查集這種數(shù)據(jù)結(jié)構(gòu),可能出現(xiàn)的頻率不是那么高,但是還會經(jīng)常性的見到,其理解學(xué)習(xí)起來非常容易,通過本文,一定能夠輕輕松松搞定并查集2021-06-06JAVA匿名內(nèi)部類(Anonymous Classes)的具體使用
本文主要介紹了JAVA匿名內(nèi)部類,匿名內(nèi)部類在我們JAVA程序員的日常工作中經(jīng)常要用到,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08mybatis 返回Integer,Double,String等類型的數(shù)據(jù)操作
這篇文章主要介紹了mybatis 返回Integer,Double,String等類型的數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11