vue登录登出,解决跨域及cookies问题

最近在写vue登录时遇到跨域问题,这里记录一下

登录使用cookies记录用户信息,并使用过滤器对请求路径进行过滤

1.首先创建配置类,配置允许跨域

在这里插入图片描述

2.配置过滤器,对登录接口放行不做校验,对其它请求路径进行拦截(并获取cookie信息)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.创建登录接口,验证用户信息并回写cookies

在这里插入图片描述

4.登录成功后可以看到浏览器中已经存在cookie信息

在这里插入图片描述

5.登出功能(前端编写axios请求)

在这里插入图片描述

6.过滤器会对此请求进行拦截,并查询是否存在cookie

通过程序可以看出此时后台并没有接收到cookie信息,并执行else向前端响应错误信息
在这里插入图片描述

在这里插入图片描述
但此时浏览器却报了跨域的问题,错误信息并没有回写
在这里插入图片描述
明明已经配置跨域了,为什么还会有跨域的问题呢:
通过查阅资料了解到,filter的执行顺序是在请求进入servlet之前执行的,而我们配置的跨域配置类是在servlet之后才进行加载,所以,我们配置的跨域信息在过滤器中并没有生效,因此在filter中我们执行回写方法,向前端回写信息时,还是存在跨域。

7.要解决上述问题需要修改filter中的信息,手动配置响应头信息,修改后为

在这里插入图片描述

servletResponse1.setHeader("Access-Control-Allow-Credentials","true");
servletResponse1.setHeader("Access-Control-Allow-Headers","Origin,X-Requested-With,Content-Type,Accept");
servletResponse1.setHeader("Access-Control-Allow-Methods","GET,PUT,POST,DELETE,OPTIONS");
servletResponse1.setHeader("Access-Control-Allow-Origin","http://localhost:8080");

8.再次执行登出操作(值的注意的是这里axios请求了两次post方法,这是正常现象。

所有跨域的js在提交post请求的时候,如果服务端设置了可跨域访问都会默认发送两次请求,第一次是预检请求,查询是否支持跨域,第二次才是真正的post提交)
在这里插入图片描述
当第一次请求到来时,没有携带cookie,过滤器依然执行else方法,但我在这里手动配置请求头信息支持跨域。那么第二次请求中会携带着cookie
第一次请求,cookie为空,执行else中的内容,设置响应请求头允许跨域
在这里插入图片描述
执行else内容
在这里插入图片描述
第一次请求结束后紧接着过滤器会对第二次请求进行拦截,并查询到cookie,根据业务需求执行校验,并放行
在这里插入图片描述
总结:当使用过滤器对路径进行过滤操作时,webmvcconfig配置类中配置的跨域条件不会生效,需要在过滤器中手动配置响应头中的参数信息,使请求允许跨域

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值