一.方法:

二.实例:
1.前端:因为我们用了前后端分离,前端用node服务器,node服务器再用了ajax反向代理请求到我的spring boot 服务器。其中node服务器也用了ajax发出请求所以也存在跨域的问题。具体代码:
app.all(apiRoot + '/*', proxy('127.0.0.1:' + proxyPort, {
forwardPath: function(req, res) {
console.log('req: ', req, 'res; ', res);
return require('url').parse(req.url).path;
}
}));
后台(用的是spring boot 1.3.7.RELEASE) :用了一个filter进行了身份验证同时进行了跨域处理,具体代码:
public class AuthFilter implements Filter {
// @Autowired
//这个不能自动注入servlet和filter是被tomcat管理的
private BaseUserService baseUserService;
private String[] excludePaths;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("initFilter");
//不能在初始化中通过Appliaction Context获取因为这时候还没初始化Application Context
//baseUserService = SpringUtils.getBean("baseUserService", BaseUserService.class);
excludePaths = new String[]{"/api/user/noLogin", "/api/user/tokenError", "/api/user/loginForeground",
"/api/user/loginBackground", "/api/user/inCorrectUserId"};
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
//这里填写你允许进行跨域的主机ip
httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
//允许的访问方法
httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE, PATCH");
//Access-Control-Max-Age 用于 CORS 相关配置的缓存
httpServletResponse.setHeader("Access-Control-Max-Age", "3600");
httpServletResponse.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
String userId = request.getParameter("userId");
String token = request.getParameter("token");
//有token的 `
if (userId != null && token != null) {
try {
Integer id = Integer.parseInt(userId);
if (baseUserService == null)
baseUserService = SpringUtils.getBean("baseUserService", BaseUserService.class);
int status = baseUserService.checkLogin(id, token);
if (status == 1) {
chain.doFilter(request, response);
} else if (status == 0) {
httpServletResponse.sendRedirect("/api/user/tokenError");
} else if (status == -2) {
httpServletResponse.sendRedirect("/api/user/inCorrectUserId");
} else {
httpServletResponse.sendRedirect("/api/user/noLogin");
}
} catch (NumberFormatException exception) {
httpServletResponse.sendRedirect("/api/user/inCorrectUserId");
}
} else {
String path = httpServletRequest.getServletPath();
if (excludePath(path)) {
chain.doFilter(request, response);
} else {
httpServletRequest.getRequestDispatcher("/api/user/noLogin").forward(request, response);
}
}
// ((HttpServletResponse) response).addHeader("Access-Control-Allow-Origin", "*");
// CorsFilter corsFilter=new CorsFilter();
}
private boolean excludePath(String path) {
for (int i = 0; i < excludePaths.length; i++) {
if (path.equals(excludePaths[i]))
return true;
}
return false;
}
@Override
public void destroy() {
System.out.println("destroy method");
}
}
这种方法还适用于servlet中,特别注意的是一定要在filter动作之前加上这句话,也就是在代码的最前面加上这个话。
跨域资源共享 CORS 详解(相关链接)
2.详细请看(点开)
3.具体代码:
package edu.ecnu.yjsy.conf;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}
这里有个坑spring boot 以前的版本这样设置可以用但是 我用的1.3.7.RELEASE spring boot 不能用,所以用第二种方式是万能的
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# boot
# 跨域
# 跨域访问
# 解决跨域
# SpringBoot解决跨域请求拦截问题代码实例
# Springboot解决ajax+自定义headers的跨域请求问题
# 详解Spring Boot 2.0.2+Ajax解决跨域请求的问题
# 详解springboot设置cors跨域请求的两种方式
# vue+springboot实现项目的CORS跨域请求
# Spring Boot Web应用开发 CORS 跨域请求支持
# 详解SpringBoot多跨域请求的支持(JSONP)
# Spring Boot设置支持跨域请求过程详解
# 用了
# 的是
# 进行了
# 是在
# 还没
# 有个
# 也就
# 可以用
# 适用于
# 能在
# 这句话
# 我用
# 再用
# 不能用
# 相关链接
# 资源共享
# 第二种
# 最前面
# 服务端
# 大家多多
相关文章:
建站三合一如何选?哪家性价比更高?
如何高效配置香港服务器实现快速建站?
如何快速上传自定义模板至建站之星?
网站企业制作流程,用什么语言做企业网站比较好?
如何快速使用云服务器搭建个人网站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
建站之星如何快速生成多端适配网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
Bpmn 2.0的XML文件怎么画流程图
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
广平建站公司哪家专业可靠?如何选择?
建站之星代理费用多少?最新价格详情介绍
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
如何快速查询网站的真实建站时间?
北京企业网站设计制作公司,北京铁路集团官方网站?
建站org新手必看:2024最新搭建流程与模板选择技巧
如何通过老薛主机一键快速建站?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何在建站宝盒中设置产品搜索功能?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何用好域名打造高点击率的自主建站?
广州美橙建站如何快速搭建多端合一网站?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
建站之星上传入口如何快速找到?
Python路径拼接规范_跨平台处理说明【指导】
如何快速搭建高效WAP手机网站吸引移动用户?
如何在云指建站中生成FTP站点?
网站微信制作软件,如何制作微信链接?
TestNG的testng.xml配置文件怎么写
高性能网站服务器配置指南:安全稳定与高效建站核心方案
营销式网站制作方案,销售哪个网站招聘效果最好?
如何快速搭建高效服务器建站系统?
css网站制作参考文献有哪些,易聊怎么注册?
行程制作网站有哪些,第三方机票电子行程单怎么开?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
建站之星如何防范黑客攻击与数据泄露?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
英语简历制作免费网站推荐,如何将简历翻译成英文?
移民网站制作流程,怎么看加拿大移民官网?
建站之星3.0如何解决常见操作问题?
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何选择建站程序?包含哪些必备功能与类型?
如何通过服务器快速搭建网站?完整步骤解析
沈阳制作网站公司排名,沈阳装饰协会官方网站?
网站制作服务平台,有什么网站可以发布本地服务信息?
*请认真填写需求信息,我们会在24小时内与您取得联系。