好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

最新springboot解决跨域的几种方式小结

什么是跨域

跨域:指的是浏览器不能执?其他?站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
例如:a页?想获取b页?资源,如果a、b页?的协议、域名、端?、?域名不同,所进?的访问?动都是跨域的,?浏览器
为了安全问题?般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这?点
很重要
同源策略:是指协议,域名,端?都要相同,其中有?个不同都会产?跨域;

springboot解决跨域的几种方式

方法一、SpringBoot的注解@CrossOrigin

直接在Controller方法或者类上增加@CrossOrigin注解,SpringMVC使用@CrossOrigin使用场景要求 jdk1.8+ Spring4.2+

?

1

2

3

4

5

@GetMapping ( "/hello" )

@CrossOrigin

public String hello() {

         return "hello:" + simpleDateFormat.format( new Date());

}

方式二:使用CorsFilter

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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;

@Configuration

public class ConfigConfiguration {

     @Bean

     public CorsFilter CorsFilter() {

         CorsConfiguration corsConfiguration = new CorsConfiguration();

         corsConfiguration.addAllowedOriginPattern( "*" );

         corsConfiguration.addAllowedHeader( "*" );

         corsConfiguration.addAllowedMethod( "*" );

         corsConfiguration.setAllowCredentials( true );

         UrlBasedCorsConfigurationSource ub = new UrlBasedCorsConfigurationSource();

         ub.registerCorsConfiguration( "/**" , corsConfiguration);

         return new CorsFilter(ub);

     }

}

方式三:自定义过滤(web  filter)的方式

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

@Component

public class CustomFilter implements Filter {

     @Override

     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

         HttpServletResponse res = (HttpServletResponse) servletResponse;

         // 设置允许Cookie

         res.addHeader( "Access-Control-Allow-Credentials" , "true" );

         // 允许http://HdhCmsTestxxx测试数据域(自行设置,这里只做示例)发起跨域请求

         res.addHeader( "Access-Control-Allow-Origin" , "*" );

         // 设置允许跨域请求的方法

         res.addHeader( "Access-Control-Allow-Methods" , "GET, POST, DELETE, PUT" );

         // 允许跨域请求包含content-type

         res.addHeader( "Access-Control-Allow-Headers" , "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN" );

         if (((HttpServletRequest) servletRequest).getMethod().equals( "OPTIONS" )) {

             servletResponse.getWriter().println( "ok" );

             return ;

         }

         filterChain.doFilter(servletRequest, servletResponse);

     }

}

 方式四:实现WebMvcConfigurer中addCorsMappings方法

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import org.springframework.stereotype.Component;

import org.springframework.web.servlet.config.annotation.CorsRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Component

public class MyWebMvcConfigurer implements WebMvcConfigurer {

     @Override

     public void addCorsMappings(CorsRegistry registry) {

         registry.addMapping( "/**" )  // 匹配所有的路径

                 .allowCredentials( true ) // 设置允许凭证

                 .allowedHeaders( "*" )   // 设置请求头

                 .allowedMethods( "GET" , "POST" , "PUT" , "DELETE" ) // 设置允许的方式

                 .allowedOriginPatterns( "*" );

     }

}

 方法五:采用nginx做动态代理

到此这篇关于springboot解决跨域的几种方式的文章就介绍到这了,更多相关springboot解决跨域内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/myli92/article/details/124740780

查看更多关于最新springboot解决跨域的几种方式小结的详细内容...

  阅读:15次