import org.springframework.util.StringUtils;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 跨域请求处理
*/
public class CrosFilter 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;
String origin = request.getHeader("Origin");
if(!StringUtils.isEmpty(origin)){
//但请求带有cookie的时候,origin不能为*,必须是全匹配名
response.addHeader("Access-Control-Allow-Origin",origin);
}
response.addHeader("Access-Control-Allow-Methods","*");
String header = request.getHeader("Access-Control-Allow-Headers");
//匹配所有自定义请求头
if(!StringUtils.isEmpty(header)){
response.addHeader("Access-Control-Allow-Headers",header);
}
//代表着浏览器请求第一次之后,一个小时之内可以缓存请求信息,不需要在发送预检命令
response.addHeader("Access-Control-Max-Age","3600");
//当请求带cookie的时候,需要将Credentials设置为true
response.addHeader("Access-Control-Allow-Credentials","true");
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}