跨域请求
跨域
域名、协议、端口有一个不一样,就是跨域。
实现
package com.jlpay.agent.query.framework.mvc.filter; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; /** * 自定义拦截器配置 * * @Author: heyaolei * @Date: 2021/11/5 */ @Slf4j @Configuration public class FilterConfiguration { /** * 可选字段,布尔值类型,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中;如果设为true,即表示服务器允许在请求中包含Cookie,一起发给服务器。 * 注意该值只能设为true,如果服务器不允许浏览器发送Cookie,删除该字段即可。 */ @Value("${jlpay.business.filter.allowCredentials:true}") private boolean allowCredentials; /** * 可选字段,CORS请求时默认支持6个基本字段,XMLHttpRequest.getResponseHeader()方法: * Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。 * 如果需要支持其他Headers字段,必须在Access-Control-Allow-Headers里面指定。 */ @Value("${jlpay.business.filter.allowedHeader:*}") private String allowedHeader; /** * 必填字段,支持的跨域请求的方法 */ @Value("${jlpay.business.filter.allowedMethod:*}") private String allowedMethod; /** * 必填字段,接受任意域名的请求 */ @Value("${jlpay.business.filter.allowedOrigin:*}") private String allowedOrigin; @Value("${jlpay.business.filter.corsPath:/**}") private String corsPath; /** * 跨域请求配置 * * @return */ private CorsConfiguration buildCorsConfig() { CorsConfiguration corsConfig = new CorsConfiguration(); corsConfig.setAllowCredentials(allowCredentials); corsConfig.addAllowedHeader(allowedHeader); corsConfig.addAllowedMethod(allowedMethod); //指定域名拦截配置 if (!StringUtils.isEmpty(allowedOrigin) && !CorsConfiguration.ALL.equals(allowedOrigin)) { String[] originArr = allowedOrigin.split(","); for (String origin : originArr) { corsConfig.addAllowedOrigin(origin); } } else { corsConfig.addAllowedOrigin(CorsConfiguration.ALL); } return corsConfig; } /** * 跨域请求过滤器配置 */ @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); //注:暂定所有接口均允许跨域,建议针对具体接口配置允许跨域 configSource.registerCorsConfiguration(corsPath, buildCorsConfig()); log.info("跨域请求过滤器配置:{}", JSONObject.toJSONString(configSource.getCorsConfigurations())); return new CorsFilter(configSource); } /** * 跨域请求配置注册至过滤器 * * @return */ @Bean public FilterRegistrationBean corsFilterRegist() { FilterRegistrationBean filterRegistration = new FilterRegistrationBean(); filterRegistration.setFilter(corsFilter()); filterRegistration.setName("corsFilter"); return filterRegistration; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现