SpringMVC 进行ajax跨域请求访问

关于 springmvc 3.x 版本对ajax跨域请求访问

ajax 请求后,浏览器出现跨域的问题
那么在当前环境中运行的js代码,出于安全考虑,正常情况下不能访问www.xxx.com域名下的资源。

XMLHttpRequest cannot load http://localhost:8080/project/page/t.do. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8020' is therefore not allowed access.

单个方法中访问可以直接单独进行配置

response.setHeader("Access-Control-Allow-Origin", "*"); // * :为访问服务器地址,写了 * 表示所有的服务都允许


  1. 通过 实现Filter接口实现全局ajax跨域请求
  2. 
    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.http.HttpServletResponse;
    
    import org.apache.log4j.Logger;
    
    
    public class WebContextFilter implements Filter{
        
        private static Logger logger = Logger.getLogger(WebContextFilter.class);
        
        /**
         * 
         */
        public WebContextFilter() {
            logger.info("-------初始化ajax请求跨域------");
        }
    
        /* (non-Javadoc)
         * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
         */
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            // TODO Auto-generated method stub
        }
    
        /* (non-Javadoc)
         * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
         */
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            
            HttpServletResponse httpResponse = (HttpServletResponse) response;  
            httpResponse.setHeader("Access-Control-Allow-Origin","*");  
            httpResponse.setHeader("Access-Control-Allow-Methods","POST,GET,OPTIONS,DELETE");  
            httpResponse.setHeader("Access-Control-Max-Age","3600");  
            httpResponse.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");  
            chain.doFilter(request, httpResponse);  
        }
    
        /* (non-Javadoc)
         * @see javax.servlet.Filter#destroy()
         */
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
        }
    }
    
     配置web.xml 文件
    
        
            webContextFilter
            com.test.interceptor.WebContextFilter
        
        
            webContextFilter
            /*
        
     
    

  3. 通过 继承 OncePerRequestFilter 实现ajax跨域请求
  4. import java.io.IOException;
    
    import javax.servlet.FilterChain;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.log4j.Logger;
    import org.springframework.web.filter.OncePerRequestFilter;
     
    public class CrossFilter extends OncePerRequestFilter {
    
        private static Logger logger = Logger.getLogger(CrossFilter.class);
        
        /**
         * 
         */
        public CrossFilter() {
            logger.info("--------------------ajax跨域初始化------------------------");
        }
        
        
        /* (non-Javadoc)
         * @see org.springframework.web.filter.OncePerRequestFilter#doFilterInternal(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)
         */
        @Override
        protected void doFilterInternal(HttpServletRequest request,
                HttpServletResponse response, FilterChain filterChain)
                        throws ServletException, IOException { 
            if (request.getHeader("Access-Control-Request-Method") != null 
                    && "OPTIONS".equals(request.getMethod())) {  // 如果跨域失败 将 if 注释掉去
                // CORS "pre-flight" request
                response.addHeader("Access-Control-Allow-Origin", "*");
                response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
                response.addHeader("Access-Control-Allow-Headers", "Content-Type");
                response.addHeader("Access-Control-Max-Age", "1800");//30 min
            }
            filterChain.doFilter(request, response);
        }
    
    }
    
    配置web.xml 文件
    
    
        
            webContextFilter
            com.test.interceptor.CrossFilter
        
        
            webContextFilter
            /*
        
    


      好了 这个时候可以进行ajax请求了

      SpringMVC 进行ajax跨域请求访问_第1张图片
      跨域访问.png

你可能感兴趣的:(SpringMVC 进行ajax跨域请求访问)