日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue前后分离session实现_vue2 前后端分离项目ajax跨域session问题解决

發布時間:2024/7/23 vue 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue前后分离session实现_vue2 前后端分离项目ajax跨域session问题解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近學習使用vuejs前后端分離,重構一個已有的后臺管理系統,遇到了下面這個問題:

實現跨域請求時,每次ajax請求都是新的session,導致無法獲取登錄信息,所有的請求都被判定為未登陸。

1、 vuejs ajax跨域請求

最開始使用的是vue-resource,結果發現vue2推薦的是axios,于是改成axios;

安裝axios

npm install axios -S

安裝完成后在main.js中增加一下配置:

import axios from 'axios';

axios.defaults.withCredentials=true;

main.js全部配置如下:

import Vue from 'vue'

import App from './App.vue'

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-default/index.css'

import router from './router';

import axios from 'axios';

import './assets/css/main.css'

import './assets/css/color-dark.css'

//開啟debug模式

Vue.config.debug = true;

axios.defaults.withCredentials=true;

Vue.prototype.$axios = axios;

Vue.use(ElementUI);

new Vue(

{

router,

el: '#app',

render: h => h(App)

}

).$mount('#app')

在XXX.vue文件中具體使用如下:

v-for="menu in menulist" :key="menu.fidStr">

{{menu.fname}}

{{menu.fname}}

{{firstLevelChild.fname}}

{{firstLevelChild.fname}}

{{secondLevelChild.fname}}

export default {

data() {

return {

uniqueOpened:true,

menulist:[]

}

} ,

mounted: function() {

let self = this;

this.$axios.post('http://localhost:8080/test/xxx/xxxx', {}, {

headers: {

"Content-Type":"application/json;charset=utf-8"

},

withCredentials : true

}).then(function(response) {

// 這里是處理正確的回調

let result = response.data.result;

if (0 == result) {

self.menulist = response.data.item.menulist;

} else if (11 == result || 9 == result) {

self.$router.push('/login');

} else {

console.log(response.data);

}

}).catch( function(response) {

// 這里是處理錯誤的回調

console.log(response)

});

}

}

.sidebar{

display: block;

position: absolute;

width: 200px;

left: 0;

top: 70px;

bottom:0;

background: #2E363F;

}

.sidebar > ul {

height:100%;

}

在后臺項目中的登陸攔截器中設置了,接受跨域訪問的header,如下:

public class LoginInterceptor extends HandlerInterceptorAdapter {

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

throws Exception {

response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, accept, content-type, xxxx");

response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");

response.setHeader("Access-Control-Allow-Origin", "*");

return true;

}

現在可以就可以跨域訪問了。

2、登陸session獲取

因為是后臺管理系統,肯定都需要需要登陸,才能用的, 因此我在登陸時保存了session

//登陸成功

session.setAttribute("user", obj);

我希望其它請求進來時,在攔截器中判斷是否登陸了,是否有權限訪問這個請求路徑

//攔截器中增加,獲取session代碼

HttpSession session =request.getSession();

System.out.println("攔截器中的session的id是====" + session.getId());

Object obj = session.getAttribute("user");

結果發現,每次ajax跨域訪問都是新的session ,每次的sessionID都不一樣

在segmentfault上提了一個問題,有人提示需要讓ajax請求攜帶cookie,也就是認證信息,于是在攔截器中,增加了一個需要認證信息的header:

response.setHeader("Access-Control-Allow-Credentials", "true");

然后再次在瀏覽器中測試,發現瀏覽器提示,當Access-Control-Allow-Credentials設為true的時候,Access-Control-Allow-Origin不能設為星號,既然不讓我設為星號,我就改成前端項目的配置

response.setHeader("Access-Control-Allow-Origin", "http://127.0.0.1:8010");

發現每次ajax請求,還是不同的session,打開chrome的network,發現每次請求的請求頭中并沒有,和我想象的一樣攜帶cookie信息,也就是下面這個header:

Cookie:JSESSIONID=node015f4w1j2kgjk61i7jyyim8lo3u0.node0;

因為我用的axios,所以找到axios的文檔鏈接描述

發現一下內容:

// `timeout` specifies the number of milliseconds before the request times out.

// If the request takes longer than `timeout`, the request will be aborted.

timeout: 1000,

// `withCredentials` indicates whether or not cross-site Access-Control requests

// should be made using credentials

withCredentials: false, // default

// `adapter` allows custom handling of requests which makes testing easier.

// Return a promise and supply a valid response (see lib/adapters/README.md).

adapter: function (config) {

/* ... */

},

withCredentials默認是false,意思就是不攜帶cookie信息,那就讓它為true,我是全局性配置的,就是main.js中的這句話:

axios.defaults.withCredentials=true;

然后再測試,發現每次ajax請求都是同樣的session了(不包含瀏覽器的options請求)。

3、代理配置

因為不想每個頁面里的請求都寫http://127.0.0.1:8080,并且我用的是element ui的webpack項目模板,

所以就想使用代理(不知道叫這個合適不合適):

devServer: {

host: '127.0.0.1',

port: 8010,

proxy: {

'/api/': {

target: 'http://127.0.0.1:8080',

changeOrigin: true,

pathRewrite:{

'/api':'/xxxxxx'

}

}

}

把ajax請求改成下面這個樣子:

this.$axios.post('/api/xx/xxx', {}, {

headers: {

"Content-Type": "application/json;charset=utf-8"

}

}).then(function(response) {

// 這里是處理正確的回調

}).catch(function(response) {

// 這里是處理錯誤的回調

console.log(response)

});

網上說都是配置為proxyTable, 用的是http-proxy-middleware這個插件,我裝上插件,改成這個,webpack總是報錯,說proxyTable是非法的配置,無法識別。

無奈改成了模板自帶的proxy,可以使用,為什么可以用,我還不清楚,proxyTabel為什么不能用,也沒搞明白。有知道的,可以指點一下。

雖然代理配置好了,也能正常請求,結果發現請求的session又不一樣了,感覺心好累啊!!!

沒辦法,只能再看請求頭是不是有問題,發現返回header中有session限制的,如下:

set-cookie:JSESSIONID=node0v5dmueoc119rb42b59k5qf3w0.node0;Path=/xxxx

要求cookie只能再/xxxx下也就是項目的根路徑下使用,于是我把代理改成:

devServer: {

host: '127.0.0.1',

port: 8010,

proxy: {

'/xxxx/': {

target: 'http://127.0.0.1:8080',

changeOrigin: true

}

}

session又恢復正常了,可以用了;不知道為什么配成api映射的形式為什么不能用。

這就是解決這個跨域session問題的過程,希望對大家有點幫助!

總結

以上是生活随笔為你收集整理的vue前后分离session实现_vue2 前后端分离项目ajax跨域session问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产高清不卡一区 | 久久国产这里只有精品 | 99精品视频在线 | 日本电车痴汉 | 成人免费一级 | 国产高潮在线观看 | 爱爱色图 | 亚洲五月花 | 老司机深夜福利网站 | 日韩电影在线观看一区 | 青青草视频成人 | bt男人天堂 | 丝袜一级片 | 日本aⅴ视频 | 国产成人av网站 | 老汉色老汉首页av亚洲 | 久久久久久久久久免费视频 | 蜜臀av一区二区三区 | 人妻大战黑人白浆狂泄 | 中文字幕精品一区二 | 国产伦精品一区二区三区在线 | 精品国产视频一区二区 | 越南黄色一级片 | 伊人22| 色天堂影院 | 亚洲国产97| 日本大胆欧美人术艺术 | 国产精品男同 | 天天操天天干天天插 | 国产亚洲欧美视频 | 国产超级av| 午夜xxx| 亚洲三级视频在线观看 | 日韩系列在线 | 丁香啪啪| 国产一区二区视频在线免费观看 | av老司机福利 | 婷婷射 | 91亚色视频 | 日韩精品电影 | 久久夜色精品国产欧美乱 | freesex性hd公交车上 | 天天影视插插插 | 国产精品美女久久久久av爽 | 小箩莉末发育娇小性色xxxx | 日本香蕉视频 | 日韩在线国产 | 中文字幕乱码中文乱码b站 国产一区二区三区在线观看视频 | 一级片在线观看视频 | 男人操女人动态图 | 国产黄在线观看 | 男生裸体视频网站 | 中文字幕在线官网 | 精品国产乱码久久久 | 国产精品久久久久久福利 | 99re视频这里只有精品 | 深夜天堂| 9999视频 | 久热这里有精品 | 日韩视频在线免费观看 | 国产午夜片 | 黄色a一级片 | 九九激情网| av九九九 | 卡通动漫av | 精品综合久久久久 | 九九影院最新理论片 | 日韩欧美在线精品 | 久久高清免费 | 欧美一区二区三区激情 | 日韩一区二区三区三四区视频在线观看 | 337p色噜噜 | 久久av免费看 | 丁香网五月天 | 在线中出 | 相亲对象是问题学生动漫免费观看 | 成人黄网免费观看视频 | 四虎网站在线播放 | 欧美做受喷浆在线观看 | 国产精品扒开做爽爽爽的视频 | 精品一区免费 | 国产精品国产精品国产专区不片 | 国产精品666 | 久久久久久久久久电影 | 国产免费又爽又色又粗视频 | 欧美成人精品二区三区99精品 | 黄色三级小视频 | 日韩av导航 | 国产精彩视频一区 | 无套内谢少妇高潮免费 | 在线免费观看视频 | 国产外围在线 | 牛夜精品久久久久久久99黑人 | 国产欧美精品在线观看 | 久草青青视频 | 99人妻少妇精品视频一区 | 久草麻豆| www成人啪啪18软件 | 日韩中文字幕二区 |