跨域、同源

2022-12-24 0 622

有时后端老师没错他们邻近地区增容,USB都是对的,但一初步设计后端老师就能碰到类似于这种的难题:

Access to XMLHttpRequest at http://192.168.1.12:8888/users from origin http://192.168.1.66:8000 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource.

那个是说你布吕马了,没错布吕马,那他们要是先说说相混,

相混是,两个特别针对应用程序的小东西,BazoisA的JAVA等内容,怎样跟另两个源B可视化,明确提出的许多明确要求,能隔绝潜在性蓄意文档,也是应用程序最核心理念、基本上的安全可靠机能,制止某源的jsJAVA跟另两个源的文本可视化。

两个允诺里,他们主要就高度关注:搜索引擎(或ip)、路由器、协定、允诺天然资源门牌号,假如前二者下述相同,他们即使不相混了,就会被相混思路截击。

因此截击了甚么了?

(1)Cookie、LocalStorage、IndexedDB等储存性的文本;

(2)DOM结点;

(3)发没法AJAX允诺。

据,因此没难题。也是说相混无法全然制止CRSF反击。

接下去他们反正布吕马,是想出访不属于他们的天然资源,那个不属于他们的区分是:搜索引擎、路由器、协定下述相同。

因此他们想布吕马,要是对症,是不是绕开相混?大体分成两类:

1、服务端增设容许这类搜索引擎出访;

(1)自订CorsFilter

@Configuration public class GlobalCorsConfig { @Bean publicCorsFiltercorsFilter() { //1. 添加 CORS配置信息 CorsConfiguration config = new CorsConfiguration(); //放行哪些原始域config.addAllowedOrigin(“*”); //是否发送 Cookie config.setAllowCredentials(true); //放行哪些允诺方式config.addAllowedMethod(“*”); //放行哪些原始允诺头部信息 config.addAllowedHeader(“*”); //暴露哪些头部信息 config.addExposedHeader(“*”); //2. 添加映射路径UrlBasedCorsConfigurationSource corsConfigurationSource =newUrlBasedCorsConfigurationSource(); corsConfigurationSource.registerCorsConfiguration(“/**”,config); //3. 返回新的CorsFilter return newCorsFilter(corsConfigurationSource); } }

(2)重写 WebMvcConfigurer

@Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(“/**”) //是否发送Cookie .allowCredentials(true) //放行哪些原始域 .allowedOrigins(“*”) .allowedMethods(newString[]{“GET”, “POST”, “PUT”, “DELETE”}) .allowedHeaders(“*”) .exposedHeaders(“*”); } }

(3)注解

能直接用在Controller上或者用在指定方法上。

@RestController @CrossOrigin(origins = “*”) public class HelloController { @RequestMapping(“/hello”) public String hello() { return “hello world”; } }

(4)手动增设响应头 (HttpServletResponse

@RequestMapping(“/index”) publicString index(HttpServletResponse response) { response.addHeader(“Access-Allow-Control-Origin”,“*”); return “index”; }

(5)自订Filter

@Component public class MyCorsFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; response.setHeader(“Access-Control-Allow-Origin”, “*”); response.setHeader(“Access-Control-Allow-Methods”, “POST, GET, OPTIONS, DELETE”); response.setHeader(“Access-Control-Max-Age”, “3600”); response.setHeader(“Access-Control-Allow-Headers”, “x-requested-with,content-type”); chain.doFilter(req, res); }public void init(FilterConfig filterConfig) {} public void destroy() {} }

2、客户端自行控制;

后端改用JSONP,或者是用框架封装好的布吕马工具都能;

3、Nginx

add_header Access-Control-Allow-Origin *; add_headerAccess-Control-Allow-Methods“POST,GET,OPTIONS”; add_header Access-Control-Allow-Headers *;

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务