SpringBoot环境下解决CORS跨域问题
跨域问题
SpringBoot开发环境
首先解释一下为什么会有这个问题,
我们平常在写程序的时候基本上都是写的“单机程序”,也就是所有的代码和资源都可以使用同一个ip:port访问到。那么当前端页面需要发送请求给另外一个ip:port下的程序进行处理的时候,就跨域了。
那么有的小伙伴可能会问了,为什么我用postman去请求接口的时候就可以访问成功呢?
因为用postman的话你就直接去访问接口了啊,而没有从一个ip下的资源去请求另外一个ip下的接口
接着是解决办法,可以在前端解决也可以在后端解决,但是推荐在后端解决,因为如果在前端解决的话,前端每次向后端请求接口的时候都需要在请求头中去添加Access-Control-Allow-Origin、Access-Control-Allow-Credentials等参数,太过麻烦 而且安全性也欠佳。
以下贴出后端解决的代码
@WebFilter
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest)servletRequest;
//请求来源站点
String origin = request.getHeader("Origin");
if (!(("").equals(origin) || origin == null)){
//修改响应体,设置跨域请求可通过
response.setHeader("Access-Control-Allow-Origin", origin);
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "content-type, x-requested-with");
response.setHeader("Access-Control-Allow-Methods", "GET,HEAD,POST");
response.setHeader("Access-Control-Max-Age", "1800");
response.setHeader("Allow","GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH");
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
意思是,所有的web请求都先进行拦截,然后在doFilter方法中给请求添加上跨域请求所需要的请求头。
请注意
一定要在启动类上添加注解 @ServletComponentScan,
否则springboot不会对 @WebFilter 注解进行扫描!
最后,如果有问题还请指正
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南