欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringSecurity-2.7中跨域問題解析

 更新時間:2024年01月06日 09:46:53   作者:itl-coder.github.io  
這篇文章主要介紹了SpringSecurity-2.7中跨域問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

SpringSecurity-2.7中跨域問題

訪問測試

起因

寫這篇的起因是會了解到 SSM(@CrosOrigin)解決跨域,但是會在加入SpringSecurity配置后,這個跨域解決方案就失效了,而/login這個請求上是無法添加這個注解或者通過配置(WebMvcConfig)去解決跨域,所以只能使用SpringSecurity提供的.cros()去解決跨域,但是在學習過程中,如果稍微粗心,可能會出現(xiàn)跨域不通的問題,而以下將會說明SpringSecurity是如何配置跨域的

Postman發(fā)起的請求不屬于異步請求(區(qū)分前后端分離的JSON)

使用axios發(fā)起異步請求,

<!-- 
	前端: 使用 Live Server 啟動訪問 http://127.0.0.1:5500/index.html
 	后端: localhost:8080/login 
 -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button id="btn">發(fā)起異步請求</button>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script>
      let btnEl = document.querySelector('#btn');
      btnEl.onclick = function () {
        console.log('click......................');
        axios({
          url: 'http://localhost:8080/login',
          method: 'post',
          data: {
            username: 'zhangsan',
            password: '123456',
          },
        }).then((res) => {
          console.log(res);
        });
      };
    </script>
  </body>
</html>

請求測試

SpringSecurity-配置

config

// 【/login】需要顯示的聲明出來,在前后端分離中,本文沒有采用的是 ajax 向后端發(fā)送異步請求 
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    /**
     * 請求配置
     * authorizeHttpRequests: 開啟權(quán)限請求管理,針對 http 請求進行授權(quán)配置
     * mvcMatchers: 匹配請求
     * - permitAll: 代表放行該資源,該資源位公共資源,無需認證和授權(quán)可以直接訪問
     * - anyRequest().authenticated(): 代表所有請求,必須認證之后才能訪問
     * - formLogin: 代表開啟表單認證
     * <strong>放行資源必須放在認證資源之前</strong>
     */
    http.authorizeHttpRequests((authorizeHttpRequests) ->
            authorizeHttpRequests
                    // 預(yù)檢請求是怎么知道的:官網(wǎng)中有這樣一段描述,如圖
                    .antMatchers(HttpMethod.OPTIONS, "/login").permitAll()
                    .anyRequest().authenticated()
    );
 /**
  * 跨域配置
  */
 http.cors().configurationSource(corsConfigurationSource());
// WHITELIST 自定義的放行資源數(shù)組, /login不能出現(xiàn)在里面
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
    return (web) -> web.ignoring().antMatchers(WHITELIST);
}
}
// 此處關(guān)于下方的描述可以不更改,依然使用此配置
@Bean
CorsConfigurationSource corsConfigurationSource() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); // 新建一個跨域配置源
    // 你只要點擊 .cors().configurationSource( <- 點擊進入這個方法,查看出這個參數(shù),就明白為什么給了 CorsConfiguration,)
    CorsConfiguration configuration = new CorsConfiguration(); // 新建一個跨域配置
    configuration.setAllowCredentials(true); // 【這個憑證問題,后續(xù)會給出詳細解釋,在 axios 的配置中默認是false,【axios 中 `withCredentials` 表示跨域請求時是否需要使用憑證】瀏覽器是否應(yīng)當發(fā)送憑證信息,如cookie。
    configuration.setAllowedMethods(Arrays.asList("*")); // 允許的請求方法,*表示允許所有方法
    configuration.setAllowedHeaders(Arrays.asList("*")); // 允許的請求頭,*表示允許所有頭
    configuration.setMaxAge(Duration.ofHours(1)); // 預(yù)檢請求的有效期,有效期內(nèi)不必再次發(fā)送,默認是1800秒。
    configuration.setAllowedOriginPatterns(Arrays.asList("*"));// 允許的請求源
    source.registerCorsConfiguration("/**", configuration); // 注冊跨域配置
    return source;
}

以上配置其實可以算正確,但是有合規(guī)

在調(diào)試后發(fā)現(xiàn),只需要將/login加入(.antMatchers("/login").permitAll()),在所看到的視頻中的關(guān)于SpringSecurity的跨域就生效了,也可以不將預(yù)檢配置出來

到此這篇關(guān)于SpringSecurity-2.7中跨域問題的文章就介紹到這了,更多相關(guān)SpringSecurity跨域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java基礎(chǔ)之Integer使用的注意事項及面試題

    Java基礎(chǔ)之Integer使用的注意事項及面試題

    這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)之Integer使用注意事項及面試題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-12-12
  • Java?Web開發(fā)常用框架Spring?MVC?Struts示例解析

    Java?Web開發(fā)常用框架Spring?MVC?Struts示例解析

    這篇文章主要為大家介紹了Java?Web開發(fā)常用框架Spring?MVC?Struts示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • Json字符串與Object、List、Map的互轉(zhuǎn)工具類

    Json字符串與Object、List、Map的互轉(zhuǎn)工具類

    今天小編就為大家分享一篇關(guān)于Json字符串與Object、List、Map的互轉(zhuǎn)工具類,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • java?-jar命令及SpringBoot通過java?-jav啟動項目的過程

    java?-jar命令及SpringBoot通過java?-jav啟動項目的過程

    本篇文章將為大家講述關(guān)于 SpringBoot 項目工程完成后,是如何通過 java-jar 命令來啟動的,以及介紹 java-jar 命令的詳細內(nèi)容,對SpringBoot java?-jav啟動過程感興趣的朋友跟隨小編一起看看吧
    2023-05-05
  • SpringBoot統(tǒng)計接口調(diào)用耗時的三種方式

    SpringBoot統(tǒng)計接口調(diào)用耗時的三種方式

    在實際開發(fā)中,了解項目中接口的響應(yīng)時間是必不可少的事情,SpringBoot 項目支持監(jiān)聽接口的功能也不止一個,接下來我們分別以 AOP、ApplicationListener、Tomcat 三個方面去實現(xiàn)三種不同的監(jiān)聽接口響應(yīng)時間的操作,需要的朋友可以參考下
    2024-06-06
  • elasticsearch集群查詢超10000的解決方案

    elasticsearch集群查詢超10000的解決方案

    ES為了避免用戶的過大分頁請求造成ES服務(wù)所在機器內(nèi)存溢出,默認對深度分頁的條數(shù)進行了限制,默認的最大條數(shù)是10000條,這篇文章主要給大家介紹了關(guān)于elasticsearch集群查詢超10000的解決方案,需要的朋友可以參考下
    2024-08-08
  • 使用java實現(xiàn)百萬級別數(shù)據(jù)導(dǎo)出excel的三種方式

    使用java實現(xiàn)百萬級別數(shù)據(jù)導(dǎo)出excel的三種方式

    這篇文章主要介紹了使用java實現(xiàn)百萬級別數(shù)據(jù)導(dǎo)出excel的三種方式,有些業(yè)務(wù)系統(tǒng)可能動輒涉及到百萬上千萬的數(shù)據(jù),用正常的方法效率就變得很低,今天我們來看看這幾種實現(xiàn)思路
    2023-03-03
  • 十分鐘理解Java中的動態(tài)代理

    十分鐘理解Java中的動態(tài)代理

    十分鐘幫助大家理解Java中的動態(tài)代理,什么是動態(tài)代理?感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java數(shù)組添加元素的兩種方法

    Java數(shù)組添加元素的兩種方法

    這篇文章主要介紹了Java數(shù)組添加元素的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友跟著小編來一起學習學習吧
    2023-04-04
  • springboot中Controller內(nèi)文件上傳到本地及阿里云操作方法

    springboot中Controller內(nèi)文件上傳到本地及阿里云操作方法

    這篇文章主要介紹了springboot中Controller內(nèi)文件上傳到本地及阿里云操作方法,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2024-12-12

最新評論