排骨瘦肉丁 2019-12-17 10:49 采纳率: 0%
浏览 488

后端接口和h5交互,复杂请求只有OPTIONS,然后就没有POST请求了,为何?

后端接口服务在跟h5交互的时候POST请求,复杂请求会有一次OPTIONS请求,但是小概率出现只有OPTIONS,然后就没有POST了,OPTIONS是返回正常的状态码,这种问题出现的原因是什么呢?目前貌似只有上传文件接口出现了该问题

                public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json;charset=utf-8");
        response.setHeader("Access-Control-Allow-Origin", "*");
        // 允许的访问方法
        response.setHeader("Access-Control-Allow-Methods","POST, GET, PUT, OPTIONS, DELETE, PATCH");
        // Access-Control-Max-Age 用于 CORS 相关配置的缓存
        response.setHeader("Access-Control-Max-Age", "86400");
        response.setHeader("Access-Control-Allow-Headers","token,Origin, X-Requested-With, Content-Type, Accept");

        if(HttpMethod.OPTIONS.name().equals(request.getMethod().toUpperCase())){
            response.setStatus(HttpStatus.SC_NO_CONTENT);
            filterChain.doFilter(request,response);
        }

        boolean check = false;
        String token = request.getHeader("token");

        if(StringUtils.isNotBlank(token)){
            long mobile = redisProxy.getMobileByToken(token);
            if(mobile > 0){
                // token验证成功
                check = true;
                request.setAttribute(Constant.REQUEST_UM5, Md5Util.getMd5(mobile));
            }
        }
        if(check){
            filterChain.doFilter(request,response);
        }else {
            //验证不通过 返回需要登录的状态码
            ResponseView responseView = new ResponseView(ResultType.NEED_LOGIN);
            String resultStr = JSON.toJSONString(responseView);
            PrintWriter writer = null;
            try {
                writer = response.getWriter();
                writer.write(resultStr);
                writer.flush();
            } catch (IOException e) {
                log.error("filter error:{}",e);
            }finally {
                if(writer != null ){
                    writer.close();
                }
            }
        }
    }

  • 写回答

1条回答 默认 最新

  • 关注

    springmvc里面有没有配置跨域相关的的filter之类的,如CorsFilter等等

    @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
                throws ServletException, IOException {
            response.addHeader("Access-Control-Allow-Origin", "*");
            response.addHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,HEAD,OPTIONS");
            response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type,Authorization, X-Trace-ID,Accept");
            response.addHeader("Content-Type", "application/json;charset=utf-8");
            filterChain.doFilter(request, response);
        }
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码