Springmvc ajax跨域请求处理方法实例详解
发布时间:2020-05-23 12:07:26 所属栏目:Java 来源:互联网
导读:上次给一个网站写网站前后端分离最后跪在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跨域请求处理方法实例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持! (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
