国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

解決前后端分離 vue+springboot 跨域 session+cookie失效問題

2019-11-19 11:35:30
字體:
來源:轉載
供稿:網(wǎng)友

環(huán)境:

前端 vue ip地址:192.168.1.205

后端 springboot2.0 ip地址:192.168.1.217

主要開發(fā)后端。

問題:

首先登陸成功時將用戶存在session中,后續(xù)請求在將用戶從session中取出檢查。后續(xù)請求取出的用戶都為null。

解決過程:

首先發(fā)現(xiàn)sessionID不一致,導致每一次都是新的會話,當然不可能存在用戶了。然后發(fā)現(xiàn)cookie瀏覽器不能自動保存,服務器響應set-cookie了

搜索問題,發(fā)現(xiàn)跨域,服務器響應的setCookie瀏覽器無法保存,而且就算保存了域名不同也不能攜帶。

第一步:

后臺添加過濾器,因為前后端分離,不可能每個方法都寫一遍,所以添加過濾器統(tǒng)一處理。

package com.test.filter;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebFilter(urlPatterns = "/*", filterName = "CORSFilter")public class CORSFilter implements Filter { @Override public void destroy() { } /**  * 此過濾器只是處理跨域問題  * @param servletRequest  * @param servletResponse  * @param chain  * @throws ServletException  * @throws IOException  */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws ServletException, IOException {  HttpServletRequest req = (HttpServletRequest) servletRequest;  HttpServletResponse resp = (HttpServletResponse) servletResponse;  String origin = req.getHeader("Origin");  if(origin == null) {   origin = req.getHeader("Referer");  }  resp.setHeader("Access-Control-Allow-Origin", origin);//這里不能寫*,*代表接受所有域名訪問,如寫*則下面一行代碼無效。謹記  resp.setHeader("Access-Control-Allow-Credentials", "true");//true代表允許攜帶cookie  chain.doFilter(servletRequest,servletResponse); } @Override public void init(FilterConfig filterConfig) throws ServletException { }}

springboot2.配置過濾器時,啟動類必須加上@ServletComponentScan才會加載過濾器

@SpringBootApplication@EnableTransactionManagement(order = 10)@ServletComponentScanpublic class Application { public static void main(String[] args) {  SpringApplication.run(Application.class, args); }}

然后前端配置

使用vue.resource發(fā)送請求時配置如下:main.js中Vue.http.options.xhr = { withCredentials: true }使用vue.axios發(fā)送請求時配置如下:axios.defaults.withCredentials = true;jquery請求帶上 xhrFields: {withCredentials: true}, crossDomain: true;$.ajax({ type: "post", url: "", xhrFields: {withCredentials: true}, crossDomain: true, data: {username:$("#username").val()}, dataType: "json", success: function(data){ }});

此時問題已解決。

但我查看請求時,還是沒有帶cookie,太糾結于這一點了。以至于查看全部cookie時突然明白了。

沒有帶cookie。

瀏覽器全部cookie

已經(jīng)有服務器的cookie了。當向服務器發(fā)送請求時,會攜帶cookie,證明是同一會話。

發(fā)現(xiàn)火狐的請求頭中存在cookie,不知道為什么谷歌的請求頭不顯示,不明白。望解答。

總結

以上所述是小編給大家介紹的解決前后端分離 vue+springboot 跨域 session+cookie失效問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 紫阳县| 车险| 民乐县| 开远市| 遵化市| 泰安市| 石家庄市| 游戏| 清镇市| 宜兰市| 皮山县| 平塘县| 桓台县| 上栗县| 阿勒泰市| 益阳市| 乌审旗| 夏河县| 宜都市| 喀什市| 盖州市| 淄博市| 博罗县| 祥云县| 土默特左旗| 故城县| 台湾省| 剑河县| 安康市| 保康县| 社会| 朝阳县| 毕节市| 西平县| 凉城县| 枣庄市| 汝州市| 美姑县| 楚雄市| 绵阳市| 富民县|