Vue axios Post请求 403 解决之道

前言:

刚开始请求的时候报 CORS 错误,通过前端项目配置后算是解决了,然后,又开始了新的报错 403 ERR_BAD_REQUEST。但是 GET 请求是正常的。

后端的 Controller 接口代码如下:

java 复制代码
@PostMapping(value = "/login2")
    @ResponseBody
    public LoginReq login2(@RequestBody LoginReq req, HttpServletRequest servletRequest, HttpServletResponse response) {
        System.out.println("---- login2 ----- userName = " + req.getUserName());
//        // 设置js请求跨域解决
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        response.setHeader("Access-Control-Allow-Methods", "GET, PUT, OPTIONS, POST");

        String userCode = servletRequest.getHeader("userCode");

        String accessToken = servletRequest.getParameter("accessToken");
        System.out.println("---- login2 --------------- accessToken = " + accessToken+" , userCode = " + userCode);
        String user = JSONObject.toJSONString(req);
        System.out.println("---- login2 ----- user = " + user);
        System.out.println("---- login2 -----  birthday = " + req.getBirthday());
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        Date date = null;
        try {
            date = simpleDateFormat.parse(simpleDateFormat.format(req.getBirthday()));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("date = " + simpleDateFormat.format(date));
        req.setBirthday(new Date());
        // 获取 cookie
        Cookie[] cookies = servletRequest.getCookies();
        if (cookies != null && cookies.length > 0) {
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                String value = cookie.getValue();
                System.out.println("cookie >> name = " + name + " , value = " + value);
            }
        }
        if (req.getUserName().isEmpty() || req.getPwd().isEmpty()) {
            throw new RuntimeException("userName or pwd is empty");
        }
        return req;
    }

前端的调用代码如下:

javascript 复制代码
 axios({
                    method: 'POST',
                    url: 'login/demo_war_exploded/login2',
                    data: JSON.stringify(
                        {
                            'userName':"朱",
                            'pwd':"pass1234!",
                            'birthday':"2022-12-06"
                        }),
                    headers: {
                        'Content-Type' : 'application/json'
                    }
                }).then(response => {
                    console.log(response)
                }).catch(function (error) {
                        console.log(error)
                })
解决跨域问题的前端配置:
javascript 复制代码
 proxy: {
     "/login" :{
        target: "http://localhost:8180/",
        changeOrigin: true,
        //ws: true,//websocket支持
        secure: false,
        pathRewrite: {
          "^/login": ""
        },
       
      }
 }

403 报错如下图:

网上搜索了一堆都不行,各种五花八门的答案,对我来说都是无效的。

直到后面问了一个前端的同事,他让我在配置跨域的地方加一行配置,结果就 OK 啦,

javascript 复制代码
proxy: { //配置多个跨域
      "/login" :{
        target: "http://localhost:8180/",
        changeOrigin: true,
        //ws: true,//websocket支持
        secure: false,
        pathRewrite: {
          "^/login": ""
        },
        // 后面新增的配置
        onProxyReq(proxyReq) {
          proxyReq.removeHeader('origin')
        }
      }
    },

最后,成功的截图如下:

相关推荐
蓝天星空23 分钟前
html生成注册与登录代码
javascript·css·html
宜昌李国勇28 分钟前
`http_port_t
android·前端
我家猫叫佩奇32 分钟前
React项目eslint8 升级到 9记录
前端
API_Zevin1 小时前
如何优化亚马逊广告以提高ROI?
大数据·开发语言·前端·后端·爬虫·python·学习
野槐1 小时前
CSS进阶和SASS
前端·less·scss
_Feliz1 小时前
vue2实现excel文件预览
vue.js·elementui·excel
玩具工匠1 小时前
字玩FontPlayer开发笔记3 性能优化 大量canvas渲染卡顿问题
前端·javascript·vue.js·笔记·elementui·typescript
CodeClimb2 小时前
【华为OD-E卷 - 服务失效判断 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
CodeClimb2 小时前
【华为OD-E卷 - 九宫格按键输入 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
m0_748248772 小时前
YOLOv5部署到web端(flask+js简单易懂)
前端·yolo·flask