当前位置:   article > 正文

SpringBoot跨域配置_response.setheader("acce

response.setheader("acce

什么是跨域

简单而言,跨域请求就是当一台服务器资源从另一台服务器(不同 的域名或者端口)请求一个资源或者接口,就会发起一个跨域 HTTP 请求。举个简单的例子,从http://www.baidu.com,发送一个 Ajax 请求,请求地址是 http://www.taobao.com下面的一个接口,这就是发起了一个跨域请求,在不做任何处理的情况下,显然当前跨域请求是无法被成功请求,因为浏览器基于同源策略会对跨域请求做一定的限制。

产生跨域问题的条件

例如: http://192.168.38.438:8080
当协议、IP、端口三部分中有任意一个不同时,即为跨域

后端结局方案

nginx反向代理解决跨域
服务端设置Response Header(响应头部)的Access-Control-Allow-Origin
在需要跨域访问的类和方法中设置允许跨域访问(如Spring中使用@CrossOrigin注解);
继承使用Spring Web的CorsFilter(适用于Spring MVC、Spring Boot)
实现WebMvcConfigurer接口(适用于Spring Boot)

一、使用Filter方式进行设置

使用Filter过滤器来过滤服务请求,向请求端设置Response Header(响应头部)的Access-Control-Allow-Origin属性声明允许跨域访问。

  1. @WebFilter
  2. public class CorsFilter implements Filter {
  3. @Override
  4. public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
  5. HttpServletResponse response = (HttpServletResponse) res;
  6. response.setHeader("Access-Control-Allow-Origin", "*");
  7. response.setHeader("Access-Control-Allow-Methods", "*");
  8. response.setHeader("Access-Control-Max-Age", "3600");
  9. response.setHeader("Access-Control-Allow-Headers", "*");
  10. response.setHeader("Access-Control-Allow-Credentials", "true");
  11. chain.doFilter(req, res);
  12. }
  13. }

或者

  1. package com.wk.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.cors.CorsConfiguration;
  5. import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
  6. import org.springframework.web.filter.CorsFilter;
  7. @Configuration
  8. public class CorsConfig {
  9. // 当前跨域请求最大有效时长。这里默认1
  10. private static final long MAX_AGE = 24 * 60 * 60;
  11. @Bean
  12. public CorsFilter corsFilter() {
  13. UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
  14. CorsConfiguration corsConfiguration = new CorsConfiguration();
  15. corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
  16. corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
  17. corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
  18. corsConfiguration.setMaxAge(MAX_AGE);
  19. source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
  20. return new CorsFilter(source);
  21. }
  22. }

二、继承 HandlerInterceptorAdapter

  1. @Component
  2. public class CrossInterceptor extends HandlerInterceptorAdapter {
  3. @Override
  4. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  5. response.setHeader("Access-Control-Allow-Origin", "*");
  6. response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
  7. response.setHeader("Access-Control-Max-Age", "3600");
  8. response.setHeader("Access-Control-Allow-Headers", "*");
  9. response.setHeader("Access-Control-Allow-Credentials", "true");
  10. return true;
  11. }
  12. }

三、实现 WebMvcConfigurer

  1. @Configuration
  2. @SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")
  3. public class AppConfig implements WebMvcConfigurer {
  4. @Override
  5. public void addCorsMappings(CorsRegistry registry) {
  6. registry.addMapping("/**") // 拦截所有的请求
  7. .allowedOrigins("http://www.abc.com") // 可跨域的域名,可以为 *
  8. .allowCredentials(true)
  9. .allowedMethods("*") // 允许跨域的方法,可以单独配置
  10. .allowedHeaders("*"); // 允许跨域的请求头,可以单独配置
  11. }
  12. }

四、使用Nginx配置

  1. location / {
  2. add_header Access-Control-Allow-Origin *;
  3. add_header Access-Control-Allow-Headers X-Requested-With;
  4. add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
  5. if ($request_method = 'OPTIONS') {
  6. return 204;
  7. }
  8. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/629202
推荐阅读
相关标签
  

闽ICP备14008679号