微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Springmvc ajax跨域请求处理方法实例详解

上次给一个网站写网站  前后端分离 最后跪在ajax跨域上面了  自己在网上找了个方法  亲试可用  记录一下

一个类  继承handlerinterceptorAdapter

package com.util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.handlerinterceptorAdapter;
public class CommonInterceptor extends handlerinterceptorAdapter {
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Access-Control-Allow-Methods","*");
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"); // 是否允许浏览器携带用户身份信息(cookie)
return true;
}
}

然后在xml里面配置一下路径

<mvc:interceptors>
<!--过滤所有请求,处理跨域请求问题 -->
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.util.CommonInterceptor" />
</mvc:interceptor>
</mvc:interceptors>

 这样就可以了  不过有篇博客说针对简单跨域没问题。但是针对post+json请求却失败,提示跨域失败。所以下面记录一下他的解决方

建立一个类  继承 OncePerRequestFilter

public class CrossFilter extends OncePerRequestFilter {
  @Override
  protected void doFilterInternal(HttpServletRequest request,FilterChain filterChain) throws servletexception,IOException {
    if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getmethod())) {
      // 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里面设置一下

<filter>
  <filter-name>cors</filter-name>
  <filter-class>cn.***.filter.CrossFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>cors</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

然后就可以了  上述方式为spring3.0版本  如果是4.0版本可以用下面方式(无测)

xml里面配置

  <mvc:cors>
    <mvc:mapping path="/**" allowed-origins="*" allow-credentials="true" max-age="1800" allowed-methods="GET,OPTIONS"/>
  </mvc:cors>

PS:使用SpringMVC解决Ajax跨域问题

package com.mengyao.system.filter;
 import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.servletexception;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
/**
 * CORSFilter 解决跨域问题
 * @author mengyao
 *
 */
@Component
public class InitCORSFilter extends OncePerRequestFilter {
  private Logger logger = LoggerFactory.getLogger(InitCORSFilter.class);
  public InitCORSFilter() {
    logger.info("==== 初始化系统允许跨域请求 ====");
  }
  /**
   * 解决跨域:Access-Control-Allow-Origin,值为*表示服务器端允许任意Domain访问请求
   */
  @Override
  protected void doFilterInternal(HttpServletRequest request,FilterChain filterChain)
      throws servletexception,IOException {
    if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getmethod())) {
      response.addheader("Access-Control-Allow-Origin",DELETE,OPTIONS");
      response.addheader("Access-Control-Allow-Headers","origin,content-type,accept,x-requested-with,sid,mycustom,smuser");
      response.addheader("Access-Control-Max-Age",response);
  }
}

好了,代码到此结束!

总结

以上所述是小编给大家介绍的Springmvc ajax跨域请求处理方法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐