- 今天在项目对接时候,我在session中存储了实体类数据,在本地用PostMan测数据是可以通过,前端对接数据的时候获取不到数据,当时觉得很奇怪,查阅资料后修改如下:
解决方法
- 在Java工程目录中添加CrossFilter类
- 代码如下
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/*
* 跨域问题过滤
* */
@Component
public class CORSFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.addHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT, GET");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
response.setHeader("Access-Control-Allow-Credentials", "true");
filterChain.doFilter(request,response);
}
@Override
public void destroy() {
}
}
- 如果还是不行,就要在前端中加入,如下代码
ajax需要设置:
xhrFields: {
withCredentials: true
},
crossDomain: true
-
注意在Java工程目录中添加CrossFilter类
Access-Control-Allow-Credentials 是true的时候。Access-Control-Allow-Origin"的值不能为*。 在ajax 请求是也要加相应的东西
总结,
- 细心
- 反思
- 提升
- 用智商写代码,用情商去工作!