当前位置:   article > 正文

Vue跨域访问后端接口问题解决_vue-admin-template 跨域请求

vue-admin-template 跨域请求

VUE访问接口的时候,很可能出现跨域请求,从而被提供接口的服务器拒绝,下面这篇文章主要给大家介绍了关于Vue如何解决跨域问题的相关资料,需要的朋友可以参考下

什么是跨域

跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据。源指协议,端口,域名。只要这个3个中有一个不同就是跨域。 这里列举一个经典的列子:

#协议跨域
http://a.baidu.com访问https://a.baidu.com;
#端口跨域
http://a.baidu.com:8080访问http://a.baidu.com:80;
#域名跨域
http://a.baidu.com访问http://b.baidu.com;

通常在不同服务器访问过程中可能会遇到跨域问题,也就是口头上常说的策略同源问题 CORS

出现跨越一般就是判断三个地方,http协议,请求地址,端口号,三者若有一处不相同,那么就会出现跨域,解决这个问题就要配置一个代理服务器,通过代理服务器实现跨域请求

问题代码

前端代码

使用了Vue Admin Template

  1. # just a flag
  2. ENV = 'development'
  3. # base api
  4. VUE_APP_BASE_API = 'http://localhost:8201'

 远程访问后端的地址为:http://localhost:8201

前端地址为:http://localhost:9528

 请求的URI的地址

  1. import request from '@/utils/request'
  2. export function login(data) {
  3. return request({
  4. url: '/admin/user/login',
  5. method: 'post',
  6. data
  7. })
  8. }
  9. export function getInfo(token) {
  10. return request({
  11. url: '/admin/user/info',
  12. method: 'get',
  13. params: { token }
  14. })
  15. }
  16. export function logout() {
  17. return request({
  18. url: '/admin/user/logout',
  19. method: 'post'
  20. })
  21. }

后端代码

  1. @RestController
  2. @RequestMapping("/admin/user")
  3. @Slf4j
  4. public class UserController {
  5. @PostMapping("/login")
  6. public R login(@RequestBody Map<String, Object> map) {
  7. // 查询数据库
  8. log.info(map.toString());
  9. return R.ok().data("token", "admin-token");
  10. }
  11. @GetMapping("/info")
  12. public R info(@RequestBody Map<String, Object> map) {
  13. // 查询数据库
  14. log.info(map.toString());
  15. return R.ok()
  16. .data("roles", "[admin]")
  17. .data("introduction", "I am a super administrator")
  18. .data("avatar", "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif")
  19. .data("name", "Super Admin");
  20. }
  21. }

问题复现

问题分析

看到这个状态码CORS error可以知道这是跨域访问出错,当然这个状态码也不是绝对的,也有可能是后端接口出了问题。

以前是前端和后端是一个项目,所以才没遇到这个问题。

跨域问题:当前端使用 axios给后端发送远程异步请求的时候,会遇到跨域问题!

要求后端和前端要保持ip【域名】、port、协议一致。前端和后端只要这三个有一个不一致就会有跨域问题。

解决方案

全局解决方案:

gateway,以后有空的时候完善一下这块解决方案,现在只是提一下这个方法。

局部解决方案:

只需要在后端的controller类上写@CrossOrigin注解就可以

  1. @RestController
  2. @RequestMapping("/admin/user")
  3. @Slf4j
  4. @CrossOrigin
  5. public class UserController {
  6. @PostMapping("/login")
  7. public R login(@RequestBody Map<String, Object> map) {
  8. // 查询数据库
  9. log.info(map.toString());
  10. return R.ok().data("token", "admin-token");
  11. }
  12. @GetMapping("/info")
  13. public R info(@RequestBody Map<String, Object> map) {
  14. // 查询数据库
  15. log.info(map.toString());
  16. return R.ok()
  17. .data("roles", "[admin]")
  18. .data("introduction", "I am a super administrator")
  19. .data("avatar", "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif")
  20. .data("name", "Super Admin");
  21. }
  22. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/548619
推荐阅读
相关标签
  

闽ICP备14008679号