• 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 相关知识,看到同事这样的,但是从个人理解来说,方法二是在拦截器 里面写的,可能有问题,需要验证。

  • 相关阅读:
    实现页面切换(动画效果实现,不用ViewPager)
    “仅仅生一个娃”--设计模式中的单例模式
    ZOJ
    【J2SE高速进阶】——多线程之synchronized
    [LeetCode] Search a 2D Matrix II
    leetCode 58.Length of Last Word (最后单词的长度) 解题思路和方法
    [CentOS]怎样解决gcc版本号冲突?
    从0开始学习 GITHUB 系列之「GITHUB 常见的几种操作」【转】
    从0开始学习 GITHUB 系列之「向GITHUB 提交代码」【转】
    从0开始学习 GITHUB 系列之「GIT 速成」【转】
  • 原文地址:https://www.cnblogs.com/boskg/p/16092274.html
Copyright © 2020-2023  润新知