Heim > Java > javaLernprogramm > Welche domänenübergreifenden Lösungen gibt es für SpringBoot-Projekte?

Welche domänenübergreifenden Lösungen gibt es für SpringBoot-Projekte?

WBOY
Freigeben: 2023-05-19 12:43:06
nach vorne
1945 Leute haben es durchsucht

Testen Sie, ob es domänenübergreifend ist. Sie können die Konsole einer Seite im Browser öffnen und dann den folgenden Code in der Konsole ausführen:

var xhr = new XMLHttpRequest()
xhr.open('GET', 'http://localhost:8080/user') // 替换请求的方法和地址
xhr.send()
xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        console.log(xhr.responseText)
    }
}
Nach dem Login kopieren
. Wenn die folgende Ausgabe angezeigt wird, bedeutet dies, dass tatsächlich domänenübergreifend vorhanden ist

1. SpringBoot konfiguriert CORS, um domänenübergreifende Probleme zu lösenWelche domänenübergreifenden Lösungen gibt es für SpringBoot-Projekte?

Das heißt, alle unsere Antwortheaderkonfigurationen ermöglichen domänenübergreifenden Zugriff, und CORS ist zu einer domänenübergreifenden Mainstream-Lösung geworden.

Erstellen Sie eine neue Konfigurationsdatei im Projekt.
  • Fügen Sie die Annotation @Configuration hinzu, um die Schnittstelle WebMvcConfigurer zu implementieren.
  • @Configuration注解实现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 WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") // 所有接口
                .allowCredentials(true) // 是否发送 Cookie
                .allowedOriginPatterns("*") // 支持域
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 支持方法
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}
Nach dem Login kopieren

二、SpringBoot 通过 CorsFilter 解决跨域

这种方式和上面的方式类似,也是通过Java Config的方式配置跨域访问,具体代码如下:

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 MyCorsFilter {
    @Bean
    public CorsFilter corsFilter() {
        // 1.创建 CORS 配置对象
        CorsConfiguration config = new CorsConfiguration();
        // 支持域
        config.addAllowedOriginPattern("*");
        // 是否发送 Cookie
        config.setAllowCredentials(true);
        // 支持请求方式
        config.addAllowedMethod("*");
        // 允许的原始请求头部信息
        config.addAllowedHeader("*");
        // 暴露的头部信息
        config.addExposedHeader("*");
        // 2.添加地址映射
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**", config);
        // 3.返回 CorsFilter 对象
        return new CorsFilter(corsConfigurationSource);
    }
}
Nach dem Login kopieren

三、SpringBoot 通过注解解决跨域

可以在我们的控制器类或控制器方法上添加,添加在类上表示里面所有方法都可跨域,添加在方法上表示指定方法可以跨域,具体代码如下:

import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/user")
@CrossOrigin
public class UserController {
    @GetMapping
    public String getAll() {
        return "成功";
    }
}
Nach dem Login kopieren

四、通过 nginx 配置 CORS 解决跨域

如果我们项目有用 nginx 做反向代理服务器时,也可以在nginx中配置CORSSchreiben Sie addCorsMappings< neu /code>-Methode und legen Sie den Code fest, der domänenübergreifend ermöglicht </p><p></ul></p>Der spezifische Code lautet wie folgt: <p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:java;">server { ... location / { #允许 所有头部 所有域 所有方法 add_header &amp;#39;Access-Control-Allow-Origin&amp;#39; &amp;#39;*&amp;#39;; add_header &amp;#39;Access-Control-Allow-Headers&amp;#39; &amp;#39;*&amp;#39;; add_header &amp;#39;Access-Control-Allow-Methods&amp;#39; &amp;#39;*&amp;#39;; #OPTIONS 直接返回204 if ($request_method = &amp;#39;OPTIONS&amp;#39;) { return 204; } } ... }</pre><div class="contentsignin">Nach dem Login kopieren</div></div></p> 2. SpringBoot löst domänenübergreifend über CorsFilter 🎜🎜Diese Methode ähnelt der oben genannten Methode. und verwendet auch <code>Java Config, um den domänenübergreifenden Zugriff zu konfigurieren. Der spezifische Code lautet wie folgt:🎜

map $http_origin $corsHost {
    default 0;
    "~https://aa.cn" https://aa.cn;
    "~https://bb.cn" https://bb.cn;
    "~https://cc.cn" https://cc.cn;
}
server {
    ...
    location / {
        #允许 所有头部 所有$corsHost域 所有方法
        add_header &#39;Access-Control-Allow-Origin&#39; $corsHost;
        add_header &#39;Access-Control-Allow-Headers&#39; &#39;*&#39;;
        add_header &#39;Access-Control-Allow-Methods&#39; &#39;*&#39;;
        #OPTIONS 直接返回204
        if ($request_method = &#39;OPTIONS&#39;) {
            return 204;
        }
    }
    ...
}
Nach dem Login kopieren
🎜3 SpringBoot löst domänenübergreifend durch Anmerkungen🎜🎜Kann zu unserer Controller-Klasse oder Controller-Methode hinzugefügt werden , und zur Klasse hinzugefügt, um alle Methoden innerhalb der Domäne darzustellen. Das Hinzufügen zur Methode bedeutet, dass die angegebene Methode wie folgt sein kann: 🎜rrreee🎜 4. Konfigurieren Sie CORS über Nginx um domänenübergreifende Probleme zu lösen 🎜🎜Wenn unser Projekt nützlich ist, kann nginx als Reverse-Proxy verwendet werden. Bei Verwendung des Servers können Sie auch CORS in konfigurieren nginx zur Lösung domänenübergreifender Probleme: 🎜🎜1. Alle Domänennamen zulassen🎜rrreee

Das obige ist der detaillierte Inhalt vonWelche domänenübergreifenden Lösungen gibt es für SpringBoot-Projekte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage