日韩性视频-久久久蜜桃-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爱免费视频| 精品人妻av一区二区 | 欧美日韩视频在线 | 亚洲aⅴ在线观看 | 婷婷第四色 | 男人天堂网av | 青青草在线播放 | 粉嫩av.com| 一级黄色短片 | 国产刺激对白 | 日本一区久久 | 少妇又色又爽又黄的视频 | 中文字幕第2页 | 国产麻豆乱码精品一区二区三区 | 国产精品国产三级国产专播品爱网 | 草草影院国产第一页 | 最近中文字幕 | 四房婷婷 | 亚洲av综合色区无码一区爱av | 国产艳俗歌舞表演hd | 91小视频在线 | 欧美老肥熟 | 99草| 日韩色影院| 浪潮av网站 | 夜夜夜夜爽 | 日韩精品在线免费视频 | 性户外野战hd | 色婷婷一区二区 | 日本手机看片 | 日韩伦理中文字幕 | 日日爱669| 男女激情在线观看 | 国产欧美日韩精品在线观看 | 精品中文字幕一区二区三区 | 欧美二三区| 九九视频这里只有精品 | 久久精品夜色噜噜亚洲a∨ 中文字幕av网 | 99在线精品视频免费观看20 | 高潮一区二区三区 | 欧美激情videos | 亚洲美女视频在线观看 | 日韩在线不卡视频 | 日本在线一区二区三区 | 成人欧美一区二区三区黑人免费 | 日韩精品高清视频 | 亚洲国产精品成人av | 日韩欧美视频二区 | 96精品| 岛国在线视频 | 奇米影视999 | av少妇| 男人靠女人免费视频网站 | 久久综合伊人77777麻豆最新章节 | 久久久久国产综合av天堂 | 久久福利网 | 国产精品亚洲lv粉色 | 欧美精品系列 | 91蜜桃婷婷狠狠久久综合9色 | 无码人妻丰满熟妇精品区 | 中文字幕一区二 | 国产a级淫片 | 99涩涩| 加勒比av在线播放 | 国产黄色一级片视频 | 女~淫辱の触手3d动漫 | 久久久久久久久久久久久久久久久久久久 | 五月天综合社区 | 性av网站 | 色播在线视频 | 国内激情 | 大陆极品少妇内射aaaaa | 亚洲大胆视频 | 久久亚洲精精品中文字幕早川悠里 | 亚洲精品在线网站 | www.youji.com| 欧美一区二区三区四区在线 | 熟女俱乐部一区二区 | av毛片精品 | 久久av红桃一区二区小说 | 99爱视频| 91色精品| 日韩欧美在线免费观看 | 国产无遮挡又黄又爽免费网站 | 男插女视频在线观看 | 亚av| 日韩欧美自拍 | 高清免费毛片 | av激情影院 | 午夜av免费观看 | 国产成人精品一区二区三区无码熬 | 欧美亚洲综合在线 | 久久人妻无码aⅴ毛片a片app | 精品偷拍网 | 精品一区二区三区视频在线观看 | 国产一二三在线 |