美文网首页
SpringMVC 进行ajax跨域请求访问

SpringMVC 进行ajax跨域请求访问

作者: 山水风情 | 来源:发表于2017-06-02 16:57 被阅读0次

关于 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", "*"); // * :为访问服务器地址,写了 * 表示所有的服务都允许

<ol>
<li> 通过 实现Filter接口实现全局ajax跨域请求 </li>


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 文件
<!-- ajax跨域解决 -->
    <filter>
        <filter-name>webContextFilter</filter-name>
        <filter-class>com.test.interceptor.WebContextFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>webContextFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 

<li>通过 继承 OncePerRequestFilter 实现ajax跨域请求</li>

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 文件

<!-- ajax跨域解决 -->
    <filter>
        <filter-name>webContextFilter</filter-name>
        <filter-class>com.test.interceptor.CrossFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>webContextFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

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

跨域访问.png

相关文章

  • SpringMVC 进行ajax跨域请求访问

    关于 springmvc 3.x 版本对ajax跨域请求访问 ajax 请求后,浏览器出现跨域的问题那么在当前环境...

  • 解释jsonp的原理

    ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问跨域的js脚本,利用...

  • Ajax跨域请求与SpringMVC结合的一些坑

    Ajax跨域的概念就不在这边陈述了... Ajax跨域请求真正的请求之前会进行一次预请求OPTIONS请求,为了让...

  • 跨域问题

    加入@CrossOrigin注解, 即可将api允许跨域访问. 注意: 当前端使用ajax方式发起跨域请求时,如:...

  • ajax跨域请求(SpringMVC)

    什么是跨域 不同协议 不同域名 不同子域 不同端口 均为跨域特别的:一个域名和其对应的ip地址也算跨域具体见下表 ...

  • javascript:面试总结

    1.JSONP原理 ajax请求受同源策略影响,不允许进行跨域请求,而script标签src属性中的链接却可以访问...

  • SpringMVC 4.x 版本进行ajax跨域请求访问

    原帖地址 http://pingguohe.net/2016/03/21/ajax-solution-spri...

  • ajax跨域请求,自定义回调方法名defined。我就呵呵了。

    之前说了,ajax的jsonp跨域请求,返回的是json格式。用了雅虎的YQL才能正确访问,-----$.ajax...

  • CSRF与XSS

    浏览器出于安全性,制定了同源策略,禁止进行跨域请求。那么什么是跨域访问呢,例如我们在一个web页面中,使用ajax...

  • javaweb 中的跨域请求

    方法一 、使用ajax进行跨域请求 方法json数据 配置拦截器用于允许指定的请求跨域 为含有/json/的url...

网友评论

      本文标题:SpringMVC 进行ajax跨域请求访问

      本文链接:https://www.haomeiwen.com/subject/ueuufxtx.html