国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Spring Security使用中Preflight請(qǐng)求和跨域問題詳解

Spring Security使用中Preflight請(qǐng)求和跨域問題詳解

2021-02-20 11:53NULL Java教程

這篇文章主要給大家介紹了關(guān)于Spring Security使用中Preflight請(qǐng)求和跨域問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。

spring security

spring security是能夠?yàn)閖2ee項(xiàng)目提供綜合性的安全訪問控制解決方案的安全框架。它依賴于servlet過濾器。這些過濾器攔截進(jìn)入請(qǐng)求,并且在應(yīng)用程序處理該請(qǐng)求之前進(jìn)行某些安全處理。

spring security對(duì)用戶請(qǐng)求的攔截過程如下:

Spring Security使用中Preflight請(qǐng)求和跨域問題詳解

背景

在一個(gè)前后端分離開發(fā)的項(xiàng)目中,使用springsecurity做安全框架,用jwt來實(shí)現(xiàn)權(quán)限管理提升restful api的安全性。首先遇到的就是跨域問題,但是在攜帶jwt請(qǐng)求過程中出現(xiàn)了服務(wù)端獲取不到j(luò)wt情況。

跨域問題

在開發(fā)過程中遇到cors (跨域資源共享) 的問題,簡(jiǎn)單的在服務(wù)器端設(shè)置了允許跨域訪問,但是在攜帶jwt請(qǐng)求過程中出現(xiàn)

Spring Security使用中Preflight請(qǐng)求和跨域問題詳解

因?yàn)閖wt是放在request header中,忽略了在跨域處理是加上允許自己定于的header字段

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@component
public class corsfilter implements filter {
 
 logger logger= loggerfactory.getlogger(corsfilter.class);
 
 @override
 public void init(filterconfig filterconfig) throws servletexception {
 
 }
 
 @override
 public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception {
  httpservletrequest request= (httpservletrequest) servletrequest;
  httpservletresponse response= (httpservletresponse) servletresponse;
  response.setheader("access-control-allow-origin",request.getheader("origin"));
  response.setheader("access-control-allow-origin","*"); //允許跨域訪問的域
  response.setheader("access-control-allow-methods","post,get,options,delete,put"); //允許使用的請(qǐng)求方法
  response.setheader("access-control-expose-headers","*");
  response.setheader("access-control-allow-headers", "x-requested-with,cache-control,pragma,content-type,authorization"); //允許使用的請(qǐng)求方法
  response.setheader("access-control-allow-credentials","true");//是否允許請(qǐng)求帶有驗(yàn)證信息
  filterchain.dofilter(servletrequest, servletresponse);
 }
 
 @override
 public void destroy() {
 
 }
}

在網(wǎng)上搜索提到要對(duì)options請(qǐng)求進(jìn)行處理返回200,但是測(cè)試并沒有起到效果

這里的options請(qǐng)求實(shí)際上就是preflight請(qǐng)求

preflight請(qǐng)求

但是問題依然沒有解決,出現(xiàn)如下

Spring Security使用中Preflight請(qǐng)求和跨域問題詳解

google了之后才知道preflight 請(qǐng)求的相關(guān)信息

在我們調(diào)用后臺(tái)接口的時(shí)候,經(jīng)常會(huì)發(fā)現(xiàn)請(qǐng)求了兩次,其實(shí)第一次發(fā)送的就是preflight request(預(yù)檢請(qǐng)求)。

為什么需要preflight request

我們都知道瀏覽器的同源策略,就是出于安全考慮,瀏覽器會(huì)限制從腳本發(fā)起的跨域http請(qǐng)求,像xmlhttprequest和fetch都遵循同源策略。

瀏覽器限制跨域請(qǐng)求一般有兩種方式:

瀏覽器限制發(fā)起跨域請(qǐng)求 跨域請(qǐng)求可以正常發(fā)起,但是返回的結(jié)果被瀏覽器攔截了

一般瀏覽器都是第二種方式限制跨域請(qǐng)求,那就是說請(qǐng)求已到達(dá)服務(wù)器,并有可能對(duì)數(shù)據(jù)庫里的數(shù)據(jù)進(jìn)行了操作,但是返回的結(jié)果被瀏覽器攔截了,那么我們就獲取不到返回結(jié)果,這是一次失敗的請(qǐng)求,但是可能對(duì)數(shù)據(jù)庫里的數(shù)據(jù)產(chǎn)生了影響。

為了防止這種情況的發(fā)生,規(guī)范要求,對(duì)這種可能對(duì)服務(wù)器數(shù)據(jù)產(chǎn)生副作用的http請(qǐng)求方法,瀏覽器必須先使用options方法發(fā)起一個(gè)預(yù)檢請(qǐng)求,從而獲知服務(wù)器是否允許該跨域請(qǐng)求:如果允許,就發(fā)送帶數(shù)據(jù)的真實(shí)請(qǐng)求;如果不允許,則阻止發(fā)送帶數(shù)據(jù)的真實(shí)請(qǐng)求。

瀏覽器將cors請(qǐng)求分成兩類:簡(jiǎn)單請(qǐng)求和非簡(jiǎn)單請(qǐng)求。

簡(jiǎn)單請(qǐng)求

1.請(qǐng)求方法是以下三種方法之一

  • head
  • get
  • post

2.http的頭信息不超出以下幾種字段

  • accept
  • accept-language
  • content-language
  • last-event-id
  • content-type:只限于三個(gè)值application/x-www-form-urlencoded、multipart/form-data、text/plain

凡是不同時(shí)滿足上面兩個(gè)條件,就屬于非簡(jiǎn)單請(qǐng)求。

而瀏覽器對(duì)這兩種請(qǐng)求的處理是不一樣的。

非簡(jiǎn)單請(qǐng)求

非簡(jiǎn)單請(qǐng)求是那種對(duì)服務(wù)器有特殊要求的請(qǐng)求,比如請(qǐng)求方法是put或delete,或者content-type字段的類型是application/json。

非簡(jiǎn)單請(qǐng)求的cors請(qǐng)求,會(huì)在正式通信之前,增加一次http查詢請(qǐng)求,稱為"預(yù)檢"請(qǐng)求(preflight)

與cors相關(guān)更詳細(xì)的看參考底部鏈接

解決方法

在我們后臺(tái)用了spring security作為安全框架,并且沒有對(duì)preflight這個(gè)請(qǐng)求做出相應(yīng)的處理,那么這個(gè)請(qǐng)求會(huì)導(dǎo)致權(quán)限管控失敗。

處理起來也很簡(jiǎn)單,只需要在spring security配置類configure方法中增加放行preflight請(qǐng)求

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@override
protected void configure(httpsecurity http) throws exception {
 http
   // 由于使用的是jwt,我們這里不需要csrf
   .csrf().disable()
   // 基于token,所以不需要session
   .sessionmanagement().sessioncreationpolicy(sessioncreationpolicy.stateless).and()
   .authorizerequests()
   // 所有 / 的所有請(qǐng)求 都放行
   .requestmatchers(corsutils::ispreflightrequest).permitall() //對(duì)preflight放行
   .antmatchers("/*").permitall()
   .antmatchers("/u").denyall()
   .antmatchers("/article/**").permitall()
   .antmatchers("/video/**").permitall()
   .antmatchers("/api/**").permitall()
   .antmatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources/**", "/configuration/**","/swagger-ui.html", "/webjars/**")
   .permitall()
   .antmatchers("/manage/**").hasrole("admin") // 需要相應(yīng)的角色才能訪問
   // 除上面外的所有請(qǐng)求全部需要鑒權(quán)認(rèn)證
   .anyrequest().authenticated();
 
 // 禁用緩存
 http.headers().cachecontrol();
 // 添加jwt filter
 http.addfilterbefore(authenticationtokenfilterbean(), usernamepasswordauthenticationfilter.class);
 //添加未授權(quán)處理
 http.exceptionhandling().authenticationentrypoint(getauthenticationentrypoint());
 //權(quán)限不足處理
 http.exceptionhandling().accessdeniedhandler(getaccessdeniedhandler());
 
}

最終問題得到解決!

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)服務(wù)器之家的支持。   

參考:

前端 | 淺談preflight request
跨域資源共享 CORS 詳解

原文鏈接:https://segmentfault.com/a/1190000012117774

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 午夜视频在线播放 | 国产日韩欧美 | 黄一区 | 久久成人免费视频 | 午夜av网站 | 成人在线视频观看 | 久久久高清 | 日韩av免费在线播放 | 激情欧美一区二区三区中文字幕 | 亚洲国产aⅴ成人精品无吗 久久综合久久久 | 91麻豆精品国产91久久久更新资源速度超快 | 久草视频在线播放 | 国产成人精品久久二区二区91 | 亚洲aⅴ天堂av在线电影软件 | 欧美精品99 | 久久综合久久久 | 成人精品福利视频 | 久久av一区二区三区 | 日韩视频在线免费播放 | 久久久久久国产 | 欧美精品91 | 美日韩成人 | 精品久久一区 | 四虎成人免费电影 | 99热在线播放 | 人人射视频 | 日韩a电影| 久久伊人亚洲 | 日韩电影免费观看 | 精品视频在线一区 | 国产精品一区久久久 | 特级a做爰全过程片 | 亚洲精品片 | 亚洲不卡视频在线观看 | 久久久国产精品免费观看 | 天堂成人av | 亚洲成人精品在线 | 亚洲国产传媒99综合 | 亚洲欧洲自拍 | 国产在线日韩 | 精品视频网 |