当前位置:   article > 正文

SpringBoot 实现跨域的六种方式_springboot设置跨域

springboot设置跨域

目录

1.通过SpringSecurity方式配置

2.使用Spring提供的CorsFilter注入Bean(推荐)

3.使用注解@CrossOrigin注解(繁琐)

4.通过ResponseBodyAdvice 实现跨域

5.通过HttpServletResponse设置跨域

6.通过WebMvcConfigurer 实现跨域


1.通过SpringSecurity方式配置

  1. @Configuration
  2. @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
  3. public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
  4. @Override
  5. protected void configure(HttpSecurity http) throws Exception {
  6. // 允许跨域
  7. http.cors().configurationSource(corsConfigurationSource());
  8. // 省略其他代码...
  9. }
  10. // 跨域配置
  11. private CorsConfigurationSource corsConfigurationSource() {
  12. CorsConfiguration config = new CorsConfiguration();
  13. config.setAllowedMethods(Arrays.asList("GET", "POST"));// 支持请求方式
  14. config.addAllowedOriginPattern("*");// 支持跨域
  15. config.setAllowCredentials(true);// cookie
  16. config.addAllowedHeader("*");// 允许请求头信息
  17. config.addExposedHeader("*");// 暴露的头部信息
  18. UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
  19. source.registerCorsConfiguration("/**", config);// 添加地址映射
  20. return source;
  21. }
  22. }

2.使用Spring提供的CorsFilter注入Bean(推荐)

  1. //....省略其他代码
  2. @Bean
  3. public CorsFilter corsFilter() {
  4. CorsConfiguration config = new CorsConfiguration();
  5. config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));// 支持请求方式
  6. config.addAllowedOriginPattern("*");// 支持跨域
  7. config.setAllowCredentials(true);// cookie
  8. config.addAllowedHeader("*");// 允许请求头信息
  9. config.addExposedHeader("*");// 暴露的头部信息
  10. UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
  11. source.registerCorsConfiguration("/**", config);// 添加地址映射
  12. return new CorsFilter(source);
  13. }
  14. //....省略其他代码

3.使用注解@CrossOrigin注解(繁琐)

  1. import org.springframework.web.bind.annotation.CrossOrigin;
  2. import org.springframework.web.bind.annotation.RequestMapping;
  3. import org.springframework.web.bind.annotation.RestController;
  4. @RestController
  5. @CrossOrigin(origins = "*")
  6. public class DemoController {
  7. @RequestMapping("/test")
  8. public Object test() {
  9. return "hello world";
  10. }
  11. }

4.通过ResponseBodyAdvice 实现跨域

与第5类似

  1. import org.springframework.core.MethodParameter;
  2. import org.springframework.http.MediaType;
  3. import org.springframework.http.server.ServerHttpRequest;
  4. import org.springframework.http.server.ServerHttpResponse;
  5. import org.springframework.web.bind.annotation.ControllerAdvice;
  6. import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
  7. @ControllerAdvice
  8. public class ResponseAdvice implements ResponseBodyAdvice {
  9. /**
  10. * 内容是否需要重写(通过此方法可以选择性部分控制器和方法进行重写)
  11. * 返回 true 表示重写
  12. */
  13. @Override
  14. public boolean supports(MethodParameter returnType, Class converterType) {
  15. return true;
  16. }
  17. /**
  18. * 方法返回之前调用此方法
  19. */
  20. @Override
  21. public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
  22. Class selectedConverterType, ServerHttpRequest request,
  23. ServerHttpResponse response) {
  24. // 设置跨域
  25. response.getHeaders().set("Access-Control-Allow-Origin", "*");
  26. return body;
  27. }
  28. }

5.通过HttpServletResponse设置跨域

HttpServletResponse#setHeader("Access-Control-Allow-Origin", "*");

6.通过WebMvcConfigurer 实现跨域

  1. import org.springframework.context.annotation.Configuration;
  2. import org.springframework.web.servlet.config.annotation.CorsRegistry;
  3. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  4. @Configuration
  5. public class CorsConfig implements WebMvcConfigurer {
  6. @Override
  7. public void addCorsMappings(CorsRegistry registry) {
  8. registry.addMapping("/**") // 所有接口
  9. .allowCredentials(true) // 是否发送 Cookie
  10. .allowedOriginPatterns("*") // 支持域
  11. .allowedMethods(new String[]{"GET", "POST"}) // 支持方法
  12. .allowedHeaders("*")// 允许请求头
  13. .exposedHeaders("*");// 暴露出去的响应头
  14. }
  15. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/458852
推荐阅读
相关标签
  

闽ICP备14008679号