笑小枫的SpringBoot系列十SpringBoot处理请求跨域问题
我们本系列应该不会遇到跨域问题,但日常工作中,一个新项目和前端小伙伴联调时还是要处理跨域问题的,本文就一起简单的看一下,以后遇到了跨域问题也可以快速解决。
什么是跨域
CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问就会遇到跨域问题。
跨域指的是由于浏览器的安全性限制,不允许前端页面访问协议不同、域名不同、端口号不同的http接口,例如我本地创建一个html,里面写一个ajax请求访问我服务器SpringBoot应用提供的接口:192.168.1.11:8080/getUser
则会出报 No 'Access-Control-Allow-Origin' header is present on the requested resource.
错误。
SpringBoot怎么解决跨域
在springboot中可以采用多种方式解决跨域问题,例如:可以在类或方法上添加
@CrossOrigin
注解。还有一种就是全局配置,全局配置需要添加自定义类实现WebMvcConfigurer
接口,然后实现接口中的addCorsMappings
方法。
- addMapping:表示对哪种格式的请求路径进行跨域处理。
- allowedHeaders:表示允许的请求头,默认允许所有的请求头信息。
- allowedMethods:表示允许的请求方法,默认是 GET、POST 和 HEAD。这里配置为 * 表示支持所有的请求方法。
- maxAge:表示探测请求的有效期
- allowedOrigins 表示支持的域
详细代码如下👇👇
package com.maple.demo.filter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpHeaders;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 跨域拦截.
*
* @author 笑小枫
* @date 2022-07-21 19:23:08
* @since JDK 1.8
*/
@WebFilter(filterName = "corsFilter", urlPatterns = "/*")
@Order(0)
public class CorsFilter implements Filter {
private static final String HEADER_ORIGIN = "Origin";
private static final String METHOD_OPTIONS = "OPTIONS";
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
if (request.getHeader(HEADER_ORIGIN) != null) {
response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, request.getHeader(HEADER_ORIGIN));
}
response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
// 如果允许所有请求方式,用*
response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, DELETE, OPTIONS");
response.setHeader(HttpHeaders.ACCESS_CONTROL_MAX_AGE÷, "3600");
// 如果允许所有header,用*
response.setHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "Authorization, Content-Type, Accept, X-Requested-With, remember-me");
response.setHeader(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Content-Disposition");
if (METHOD_OPTIONS.equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
return;
}
chain.doFilter(req, res);
}
}
关于笑小枫💕
本系列其它文章
本系列的源码已同步在Github:https://github.com/hack-feng/maple-demo
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgakcke
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01