springboot security之前后端分離配置方式
前言
spring boot security默認(rèn)配置有一個登錄頁面,當(dāng)采用前后端分離的場景下
需要解決兩個問題:
- 前端有自己的登錄頁面,不需要使用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)鍵是重寫這個方法,spring boot security的擴(kuò)展方法不只這一種,化繁為簡,盡量采用最簡單直白的方式。
認(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à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é)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
RabbitMQ交換機(jī)與Springboot整合的簡單實(shí)現(xiàn)
這篇文章主要介紹了RabbitMQ交換機(jī)與Springboot整合的簡單實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-07-07
Spring Boot + Thymeleaf + Activiti 快速開發(fā)平臺項(xiàng)目 附源碼
這篇文章主要介紹了Spring Boot + Thymeleaf + Activiti 快速開發(fā)平臺項(xiàng)目附源碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
Java中Collection與Collections的區(qū)別詳解
這篇文章主要為大家詳細(xì)介紹了Java中Collection與Collections的區(qū)別,文中有詳細(xì)的代碼示例,具有一定的參考價值,感興趣的同學(xué)可以參考一下2023-06-06
Java反射中java.beans包學(xué)習(xí)總結(jié)
本篇文章通過學(xué)習(xí)Java反射中java.beans包,吧知識點(diǎn)做了總結(jié),并把相關(guān)內(nèi)容做了關(guān)聯(lián),對此有需要的朋友可以學(xué)習(xí)參考下。2018-02-02
Springboot使用influxDB時序數(shù)據(jù)庫的實(shí)現(xiàn)
項(xiàng)目中需要存放大量設(shè)備日志,且需要對其進(jìn)行簡單的數(shù)據(jù)分析,信息提取工作,所以本文就介紹一下Springboot使用influxDB時序數(shù)據(jù)庫,感興趣的可以了解一下2021-08-08
Java面試題沖刺第六天--網(wǎng)絡(luò)編程1

