摘要:前后端分離的項(xiàng)目,使用請(qǐng)求一般都出現(xiàn)跨域的問(wèn)題??缬虻臅r(shí)候所創(chuàng)建的是不會(huì)被瀏覽器保存下來(lái)的。所以每次進(jìn)行跨域請(qǐng)求時(shí),服務(wù)器都認(rèn)為不是同一個(gè)瀏覽器所發(fā)起的請(qǐng)求,也會(huì)不一樣。以下將介紹如何保證一致。
前后端分離的項(xiàng)目,使用Ajax請(qǐng)求一般都出現(xiàn)跨域的問(wèn)題。
跨域的時(shí)候所創(chuàng)建的session是不會(huì)被瀏覽器保存下來(lái)的。所以每次進(jìn)行跨域請(qǐng)求時(shí),服務(wù)器都認(rèn)為不是同一個(gè)瀏覽器所發(fā)起的請(qǐng)求,session也會(huì)不一樣。以下將介紹如何保證session一致。
前端Ajax請(qǐng)求
$.ajax({ url:url, xhrFields: { withCredentials: true }, crossDomain: true, success:function() { }, error:function() { } });
后端構(gòu)建一個(gè)攔截器,對(duì)需要跨域訪問(wèn)的request頭部重寫(xiě)
如:
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse response= (HttpServletResponse) servletResponse; HttpServletRequest request=(HttpServletRequest)servletRequest; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("XDomainRequestAllowed","1"); filterChain.doFilter(servletRequest,servletResponse); }
另外Spring boot的項(xiàng)目可以添加攔截配置,以下:
@Component @Order(Ordered.HIGHEST_PRECEDENCE) public class AuthCorsFilter extends CorsFilter { public AuthCorsFilter() { super(configurationSource()); } private static UrlBasedCorsConfigurationSource configurationSource() { CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); config.addAllowedMethod("*"); config.setAllowCredentials(true); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", config); return source; } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67944.html
摘要:這種情況通常發(fā)生在反向代理的時(shí)候,前端發(fā)起請(qǐng)求代理服務(wù)器,代理服務(wù)器發(fā)起請(qǐng)求到,這時(shí)候就容易導(dǎo)致域名不一致,請(qǐng)一定要注意這點(diǎn)。 寫(xiě)在最前 前后端分離其實(shí)有兩類(lèi): 開(kāi)發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件整個(gè)放入后端項(xiàng)目中。 開(kāi)發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件放入單獨(dú)的靜態(tài)資源服務(wù)器中,如nginx。 這兩種方案最大的區(qū)別就是生產(chǎn)階段。由于第...
摘要:這種情況通常發(fā)生在反向代理的時(shí)候,前端發(fā)起請(qǐng)求代理服務(wù)器,代理服務(wù)器發(fā)起請(qǐng)求到,這時(shí)候就容易導(dǎo)致域名不一致,請(qǐng)一定要注意這點(diǎn)。 寫(xiě)在最前 前后端分離其實(shí)有兩類(lèi): 開(kāi)發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件整個(gè)放入后端項(xiàng)目中。 開(kāi)發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件放入單獨(dú)的靜態(tài)資源服務(wù)器中,如nginx。 這兩種方案最大的區(qū)別就是生產(chǎn)階段。由于第...
摘要:這種情況通常發(fā)生在反向代理的時(shí)候,前端發(fā)起請(qǐng)求代理服務(wù)器,代理服務(wù)器發(fā)起請(qǐng)求到,這時(shí)候就容易導(dǎo)致域名不一致,請(qǐng)一定要注意這點(diǎn)。 寫(xiě)在最前 前后端分離其實(shí)有兩類(lèi): 開(kāi)發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件整個(gè)放入后端項(xiàng)目中。 開(kāi)發(fā)階段使用dev-server,生產(chǎn)階段是打包成靜態(tài)文件放入單獨(dú)的靜態(tài)資源服務(wù)器中,如nginx。 這兩種方案最大的區(qū)別就是生產(chǎn)階段。由于第...
摘要:反向代理前后端聯(lián)調(diào)跨域什么是跨域跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。這時(shí)候,用反向代理實(shí)現(xiàn)跨域,是最簡(jiǎn)單的跨域方式。 keywords: Nginx反向代理 前后端聯(lián)調(diào) 跨域 1.什么是跨域 跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)javascript施加的安全限制。 所謂同源是指,域名,協(xié)議,端口都相同。瀏覽器執(zhí)行javascrip...
摘要:延伸這里再順便提一下,新架構(gòu)下的防御。不過(guò),還有一點(diǎn)值得一提前后端分離框架下,路由由控制我自己要獲取的后端參數(shù)和需要用在業(yè)務(wù)邏輯的參數(shù),在主觀上前端同學(xué)更好把握一些。 原文: http://feclub.cn/post/content... 背景 1、什么是CSRF攻擊? 這里不再介紹CSRF,已經(jīng)了解CSRF原理的同學(xué)可以直接跳到:3、前后端分離下有何不同?。 不太了解的同學(xué)可以看這...
閱讀 994·2023-04-25 23:54
閱讀 3075·2021-11-08 13:21
閱讀 3852·2021-09-27 13:35
閱讀 3426·2021-07-26 23:41
閱讀 1079·2019-08-30 15:52
閱讀 3485·2019-08-30 11:27
閱讀 2139·2019-08-29 18:37
閱讀 592·2019-08-29 17:24