Spring boot 跨域 后台配置

Spring boot web开发,一般采取 前后端分离

前后端分离就会涉及到跨域问题,Spring boot 提供进行后台跨域配置,允许具体跨域详细配置

方法一:注册配置类 设置 跨域问题

自定义 CorsConfig类如下

 1 @Configuration
 2 public class CorsConfig {
 3     private CorsConfiguration buildConfig() {
 4         CorsConfiguration corsConfiguration = new CorsConfiguration();
 5         //允许所有的域访问
 6         corsConfiguration.addAllowedOriginPattern("*");
 7         //允许的头信息
 8         corsConfiguration.addAllowedHeader("*");
 9         //允许所有方式的请求
10         corsConfiguration.addAllowedMethod("*");
11         //头信息缓存有效时长
12         corsConfiguration.setMaxAge(18000L);
13         corsConfiguration.setAllowCredentials(true);
14 
15         return corsConfiguration;
16     }
17 
18     @Bean
19     public CorsFilter corsFilter() {
20         UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
21         source.registerCorsConfiguration("/**", buildConfig());
22         return new CorsFilter(source);
23     }

方法二 重载 HandlerInterceptorAdapter 实现 跨域配置

在HandlerInterceptorAdapter中主要提供了以下的方法:

preHandle:在方法被调用前执行。在该方法中可以做类似校验的功能。如果返回true,则继续调用下一个拦截器。如果返回false,则中断执行,也就是说我们想调用的方法不会被执行,但是你可以修改response为你想要的响应。
postHandle:在方法执行后调用。
afterCompletion:在整个请求处理完毕后进行回调,也就是说视图渲染完毕或者调用方已经拿到响应。

 1 @Component
 2 @Order(Ordered.HIGHEST_PRECEDENCE)
 3 public class CrosInterceptor extends HandlerInterceptorAdapter {
 4 
 5     @Override
 6     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
 7         // 此处配置的是允许任意域名跨域请求,可根据需求指定
 8 
 9         //允许所有的域访问
10         response.setHeader("Access-Control-Allow-Origin", request.getHeader("origin"));
11         //允许所有方式的请求
12         response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, OPTIONS");
13 
14         response.setHeader("Access-Control-Allow-Credentials", "true");
15         //头信息缓存有效时长(如果不设 Chromium 同时规定了一个默认值 5 秒),没有缓存将已OPTIONS进行预请求
16         response.setHeader("Access-Control-Max-Age", "18000");
17         //允许的头信息
18         response.setHeader("Access-Control-Allow-Headers", "*");
19 
20         // 如果是OPTIONS则结束请求
21         if (HttpMethod.OPTIONS.toString().equals(request.getMethod())) {
22             response.setStatus(HttpStatus.NO_CONTENT.value());
23             return false;
24         }
25 
26         return true;
27     }

备注说明:本人刚开始学些Spring boot 相关知识,看到同事这样的,但是从个人理解来说,方法二是在拦截器 里面写的,可能有问题,需要验证。

 

posted @ 2022-04-02 15:20  bos_kg  阅读(594)  评论(0编辑  收藏  举报