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')
        }
      }
    },

最后,成功的截图如下:

相关推荐
崔庆才丨静觅6 分钟前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊9 分钟前
jwt介绍
前端
爱敲代码的小鱼15 分钟前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
吹牛不交税32 分钟前
admin.net-v2 框架使用笔记-netcore8.0/10.0版
vue.js·.netcore
Cobyte41 分钟前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
NEXT061 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
剪刀石头布啊1 小时前
生成随机数,Math.random的使用
前端
剪刀石头布啊1 小时前
css外边距重叠问题
前端
剪刀石头布啊1 小时前
chrome单页签内存分配上限问题,怎么解决
前端
剪刀石头布啊1 小时前
css实现一个宽高固定百分比的布局的一个方式
前端