import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebFilter(filterName="ServletFilter",urlPatterns="/*") public class ServletFilter implements Filter{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub //before HttpServletResponse res = (HttpServletResponse) response; res.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE"); // 容许全部请求类型 res.setHeader("Access-Control-Max-Age", "3600"); // 本次预检请求的有效期,单位为秒 res.setHeader("Access-Control-Allow-Origin",((HttpServletRequest)request).getHeader("Origin")); // 获取当前请求地址,容许当前请求地址 res.setHeader("Access-Control-Allow-Headers","authorization,Origin,No-Cache,X-Requested-With,If-Modified-Since,Pragma,Last-Modified,Cache-Control,Expires,Content-Type,X-E4M-With,userId,token,Access-Control-Allow-Headers,Access-Control-Allow-Origin"); // 容许请求头KEY //after } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } }
禁止使用XHR对象向不一样源的服务器地址发起HTTP请求;java
容许请求类型跨域
设置本次预检请求的有效期,单位为秒。第一次是浏览器使用OPTIONS方法发起一个预检请求,第二次才是真正的异步请求,第一次的预检请求获知服务器是否容许该跨域请求:若是容许,才发起第二次真实的请求;浏览器
容许当前请求地址。设置该头值为“*”会致使,除Chrome外的全部浏览器请求失败(以下图);因此获取当前请求地址,并设置值为当前请求地址便可。
服务器
容许请求头KEY。设置该头值为“*”会致使,除Chrome外的全部浏览器请求失败;因此尽量的将,请求头KEY都列举出来,或碰见一个请求头设置一个KEY,或设置本身须要的请求头KEY;异步