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

