ssm 对接vue跨域问题
spring 版本要求 4.3.2.RELEASE
web.xml中配置
<!--vue跨域问题20201225-->
<filter>
<filter-name>contextFilter</filter-name>
<filter-class>com.mlwy.util.ContextFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>contextFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
公共方法
package com.mlwy.util;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 前后端分离跨域问题
* @author chenchbj
*/
public class ContextFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse)servletResponse;
HttpServletRequest request = (HttpServletRequest)servletRequest;
// 解决vue跨域问题
String origin = request.getHeader("Origin");
response.setHeader("Access-Control-Allow-Origin", origin);
response.setHeader("Access-Control-Allow-Methods", "*");
String headers = request.getHeader("Access-Control-Request-Headers");
// 支持所有自定义头
if (!org.springframework.util.StringUtils.isEmpty(headers)) {
response.setHeader("Access-Control-Allow-Headers", headers);
}
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Max-Age", "3600");
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
其中
String origin = request.getHeader(“Origin”);
response.setHeader(“Access-Control-Allow-Origin”, origin);
这个最重要,以前设置都是response.setHeader(“Access-Control-Allow-Origin”, “*”);,但是需要解决vue cookie问题不行,vue需要axiox.defaults.withCredentials: true main.js中配置这个。