<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Springboot 解決跨域的四種姿勢

          共 6988字,需瀏覽 14分鐘

           ·

          2022-01-09 11:46

          簡介

          跨域我就不多說了,我們今天開門見山直接解決跨域的幾種姿勢,那就上姿勢

          姿勢

          姿勢一

          實現(xiàn)WebMvcConfigurer#addCorsMappings的方法

          import org.springframework.context.annotation.Configuration;
          import org.springframework.web.servlet.config.annotation.CorsRegistry;
          import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

          @Configuration
          public class CorsConfig implements WebMvcConfigurer {

          @Override
          public void addCorsMappings(CorsRegistry registry) {
          registry.addMapping("/**")
          .allowedOrigins("*")
          .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
          .allowCredentials(true)
          .maxAge(3600)
          .allowedHeaders("*");
          }
          }
          復(fù)制代碼

          姿勢二

          重新注入CorsFilter

          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 CorsFilterConfig {


          /**
          * 開啟跨域訪問攔截器
          *
          * @date 2021/4/29 9:50
          */
          @Bean
          public CorsFilter corsFilter() {
          //創(chuàng)建CorsConfiguration對象后添加配置
          CorsConfiguration corsConfiguration = new CorsConfiguration();
          //設(shè)置放行哪些原始域
          corsConfiguration.addAllowedOrigin("*");
          //放行哪些原始請求頭部信息
          corsConfiguration.addAllowedHeader("*");
          //放行哪些請求方式
          corsConfiguration.addAllowedMethod("*");

          UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
          //2. 添加映射路徑
          source.registerCorsConfiguration("/**", corsConfiguration);
          return new CorsFilter(source);
          }
          }
          復(fù)制代碼

          姿勢三

          創(chuàng)建一個filter解決跨域

          @Slf4j
          @Component
          @WebFilter(urlPatterns = { "/*" }, filterName = "headerFilter")
          public class HeaderFilter implements Filter {
          @Override
          public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
          HttpServletResponse response = (HttpServletResponse) resp;
          //解決跨域訪問報錯
          response.setHeader("Access-Control-Allow-Origin", "*");
          response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
          //設(shè)置過期時間
          response.setHeader("Access-Control-Max-Age", "3600");
          response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization");
          // 支持HTTP 1.1.
          response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
          // 支持HTTP 1.0. response.setHeader("Expires", "0");
          response.setHeader("Pragma", "no-cache");
          // 編碼
          response.setCharacterEncoding("UTF-8");
          chain.doFilter(request, resp);
          }

          @Override
          public void init(FilterConfig filterConfig) {
          log.info("跨域過濾器啟動");
          }

          @Override
          public void destroy() {
          log.info("跨域過濾器銷毀");
          }
          }
          復(fù)制代碼

          姿勢四

          使用CrossOrigin 注解

          可以使用在單個方法上也可以使用在類上

          Target({ElementType.TYPE, ElementType.METHOD})
          @Retention(RetentionPolicy.RUNTIME)
          @Documented
          public @interface CrossOrigin {

          /** @deprecated as of Spring 5.0, in favor of {@link CorsConfiguration#applyPermitDefaultValues} */
          @Deprecated
          String[] DEFAULT_ORIGINS = {"*"};

          /** @deprecated as of Spring 5.0, in favor of {@link CorsConfiguration#applyPermitDefaultValues} */
          @Deprecated
          String[] DEFAULT_ALLOWED_HEADERS = {"*"};

          /** @deprecated as of Spring 5.0, in favor of {@link CorsConfiguration#applyPermitDefaultValues} */
          @Deprecated
          boolean DEFAULT_ALLOW_CREDENTIALS = false;

          /** @deprecated as of Spring 5.0, in favor of {@link CorsConfiguration#applyPermitDefaultValues} */
          @Deprecated
          long DEFAULT_MAX_AGE = 1800;


          /**
          * Alias for {@link #origins}.
          */
          @AliasFor("origins")
          String[] value() default {};

          /**
          * A list of origins for which cross-origin requests are allowed. Please,
          * see {@link CorsConfiguration#setAllowedOrigins(List)} for details.
          *

          By default all origins are allowed unless {@code originPatterns} is
          * also set in which case {@code originPatterns} is used instead.
          */
          @AliasFor("value")
          String[] origins() default {};

          /**
          * Alternative to {@link #origins()} that supports origins declared via
          * wildcard patterns. Please, see
          * @link CorsConfiguration#setAllowedOriginPatterns(List)} for details.
          *

          By default this is not set.
          * @since 5.3
          */
          String[] originPatterns() default {};

          /**
          * The list of request headers that are permitted in actual requests,
          * possibly {@code "*"} to allow all headers.
          *

          Allowed headers are listed in the {@code Access-Control-Allow-Headers}
          * response header of preflight requests.
          *

          A header name is not required to be listed if it is one of:
          * {@code Cache-Control}, {@code Content-Language}, {@code Expires},
          * {@code Last-Modified}, or {@code Pragma} as per the CORS spec.
          *

          By default all requested headers are allowed.
          */
          String[] allowedHeaders() default {};

          /**
          * The List of response headers that the user-agent will allow the client
          * to access on an actual response, other than "simple" headers, i.e.
          * {@code Cache-Control}, {@code Content-Language}, {@code Content-Type},
          * {@code Expires}, {@code Last-Modified}, or {@code Pragma},
          *

          Exposed headers are listed in the {@code Access-Control-Expose-Headers}
          * response header of actual CORS requests.
          *

          The special value {@code "*"} allows all headers to be exposed for
          * non-credentialed requests.
          *

          By default no headers are listed as exposed.
          */
          String[] exposedHeaders() default {};

          /**
          * The list of supported HTTP request methods.
          *

          By default the supported methods are the same as the ones to which a
          * controller method is mapped.
          */
          RequestMethod[] methods() default {};

          /**
          * Whether the browser should send credentials, such as cookies along with
          * cross domain requests, to the annotated endpoint. The configured value is
          * set on the {@code Access-Control-Allow-Credentials} response header of
          * preflight requests.
          *

          NOTE: Be aware that this option establishes a high
          * level of trust with the configured domains and also increases the surface
          * attack of the web application by exposing sensitive user-specific
          * information such as cookies and CSRF tokens.
          *

          By default this is not set in which case the
          * {@code Access-Control-Allow-Credentials} header is also not set and
          * credentials are therefore not allowed.
          */
          String allowCredentials() default "";

          /**
          * The maximum age (in seconds) of the cache duration for preflight responses.
          *

          This property controls the value of the {@code Access-Control-Max-Age}
          * response header of preflight requests.
          *

          Setting this to a reasonable value can reduce the number of preflight
          * request/response interactions required by the browser.
          * A negative value means undefined.
          *

          By default this is set to {@code 1800} seconds (30 minutes).
          */
          long maxAge() default -1;
          復(fù)制代碼

          以上四種姿勢都學(xué)會了么?學(xué)會了三連哦


          瀏覽 22
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91成人免费在线视频 | 国产色噜噜噜 | 俺去俺来也在线WWW | 日本黄色电影网站 | 无码破解日韩AV无码 |