Springmvc ajax跨域请求处理方法实例详解
作者:mrr 时间:2023-08-25 22:56:46
上次给一个网站写网站 前后端分离 最后跪在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, HttpServletResponse response, 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,POST,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, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
response.addHeader("Access-Control-Allow-Headers", "origin, content-type, accept, x-requested-with, sid, mycustom, smuser");
response.addHeader("Access-Control-Max-Age", "1800");//30 min
}
filterChain.doFilter(request, response);
}
}
好了,代码到此结束!
总结
以上所述是小编给大家介绍的Springmvc ajax跨域请求处理方法实例详解网站的支持!
标签:spring,mvc,ajax,跨域请求
0
投稿
猜你喜欢
Android中Volley框架下保持会话方法
2022-09-11 00:44:12
Android SurfaceView拍照录像实现方法
2022-06-18 17:07:20
简单易懂的java8新特性之lambda表达式知识总结
2023-04-14 23:44:42
eclipse下配置Spring环境的方法步骤
2023-02-27 20:39:26
Android编程设计模式之抽象工厂模式详解
2023-07-15 09:35:38
Android开发使用Drawable绘制圆角与圆形图案功能示例
2023-08-26 21:07:09
Apache Commons fileUpload实现文件上传之一
2022-12-06 12:36:48
SpringBoot读取资源目录中JSON文件的方法实例
2023-04-26 02:00:42
C#中Winform 实现Ajax效果自定义按钮
2022-05-14 08:22:51
Flutter通过Container实现时间轴效果
2023-10-04 09:40:45
深入学习java中的Groovy 和 Scala 类
2023-04-09 10:51:29
谈谈Java类型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType
2022-10-18 17:43:07
C语言时间函数之strftime()详解
2023-06-26 02:42:32
C#如何获取计算机信息
2022-08-24 23:59:34
使用Spring Boot进行单元测试详情
2023-11-10 08:01:53
Maven是什么?Maven的概念+作用+仓库的介绍+常用命令的详解
2022-01-21 01:12:24
25个最好的免费Eclipse插件
2021-09-21 10:56:24
如何使用java修改文件所有者及其权限
2023-11-16 09:35:53
C语言实现仓库物资管理系统
2023-04-23 12:30:51
利用Postman和Chrome的开发者功能探究项目(毕业设计项目)
2021-10-27 10:19:43