zoukankan      html  css  js  c++  java
  • 跨域问题解决办法

    问题描述

    每次请求sessionID都不一致,导致无法获取登录状态

    前端解决办法

    全局设置携带cookie

    import Axios from 'axios'
    import qs from 'qs'
    
    Axios.defaults.withCredentials = true // 带cookie
    Axios.defaults.timeout = 30000 // 响应时间
    Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' // 配置请求头
    Axios.defaults.baseURL = '/xxx/api' // 配置接口地址

    后端解决办法

    设置过滤器

     1 package com.hikvision.seclab.web;
     2 
     3 import javax.servlet.*;
     4 import javax.servlet.annotation.WebFilter;
     5 import javax.servlet.http.HttpServletResponse;
     6 import java.io.IOException;
     7 
     8 /**
     9  * @author: 2019/9/21 16:24
    10  * @since: 0.0.1-SNAPSHOT
    11  * @modified By:
    12  */
    13 @WebFilter(urlPatterns = { "/*" }, filterName = "loginAuthFilter")
    14 public class CorsFilter implements Filter {
    15     @Override
    16     public void init(FilterConfig filterConfig) throws ServletException {
    17 
    18     }
    19 
    20     @Override
    21     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    22         HttpServletResponse response = (HttpServletResponse) servletResponse;
    23         response.setHeader("Access-Control-Allow-Origin", "http://10.xx,xx.26:8080");
    24         response.setHeader("Access-Control-Allow-Credentials", "true");
    25         response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    26         response.setHeader("Access-Control-Max-Age", "3600");
    27         response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
    28         response.setHeader("P3P","CP=CAO PSA OUR");
    29         System.out.println("*********************************过滤器被使用**************************");
    30         filterChain.doFilter(servletRequest, servletResponse);
    31     }
    32 
    33     @Override
    34     public void destroy() {
    35 
    36     }
    37 }
    View Code

    前后的上下文问题导致无法携带sessionId

    后端response中,指定了sessionID的路径,只有该路径下的请求才会携带sessionID到后端

    前端可以使用代理,请求路径不必完全与后端请求路径一致,这就有可能前端请求不在后端指定的路径下,导致无法携带sessionID到后端。

    前端设置的baseURL一定要在后端指定的路径下!!!

    前端设置的baseURL一定要在后端指定的路径下!!!

    前端设置的baseURL一定要在后端指定的路径下!!!

    前端代理设置代码:

     devServer: {
        proxy: {
          '^/xxx/': {
            target: 'http://10.xx.xx.26:8082/',
            changeOrigin: true
          }
        }
      }

    前端baseURL设置

    import Axios from 'axios'
    import qs from 'qs'
    
    Axios.defaults.withCredentials = true // 带cookie
    Axios.defaults.timeout = 30000 // 响应时间
    Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8' // 配置请求头
    Axios.defaults.baseURL = '/xxx/api' // 配置接口地址
  • 相关阅读:
    vue Bus总线
    一百个灯泡排成一排,第一轮将所有灯泡打开;
    大数相乘 java
    最长公共子子串 java
    剑指XX游戏(六)
    C++面试出现频率最高的30道题目
    C++ 容器及选用总结
    C++中的各种容器实现原理
    求1000阶乘中最后0的个数
    n个骰子可能的点数和
  • 原文地址:https://www.cnblogs.com/donfaquir/p/11571582.html
Copyright © 2011-2022 走看看