Heim >Java >javaLernprogramm >Auf welche Weise implementiert Spring Boot die domänenübergreifende Implementierung?

Auf welche Weise implementiert Spring Boot die domänenübergreifende Implementierung?

WBOY
WBOYnach vorne
2023-05-18 10:10:261378Durchsuche

1. Warum domänenübergreifende Probleme auftreten

Aufgrund der Same-Origin-Richtlinienbeschränkungen des Browsers. Same-Origin-Richtlinie (Same-Origin-Policy) ist eine Konvention. Sie ist die wichtigste und grundlegendste Sicherheitsfunktion des Browsers. Wenn die Same-Origin-Richtlinie fehlt, können die normalen Funktionen des Browsers beeinträchtigt sein. Das Web basiert auf der Same-Origin-Richtlinie, und der Browser ist lediglich eine Möglichkeit, die Same-Origin-Richtlinie zu implementieren.

In JavaScript begrenzt die Same-Origin-Richtlinie die Interaktionen zwischen verschiedenen Domänen und verhindert domänenübergreifende Angriffe. Der sogenannte gleiche Ursprung (d. h. in derselben Domäne) bedeutet, dass die beiden Seiten dasselbe Protokoll, denselben Host und dieselbe Portnummer haben. Was ist ein domänenübergreifendes Protokoll, wenn eine der Domänen vorliegt? Name und Port unterscheiden sich von der aktuellen Seiten-URL, es handelt sich um eine domänenübergreifende

3. Nicht ursprüngliche Einschränkung

Auf welche Weise implementiert Spring Boot die domänenübergreifende Implementierung?

Cookie, LocalStorage und IndexedDB von inhomogenen Webseiten können nicht gelesen werden

  1. Es kann keine Verbindung zum DOM von nicht ursprünglichen Webseiten hergestellt werden. Die wichtigsten sind wie folgt. Es stehen drei Möglichkeiten zur Auswahl:

  2. Einen neuen CorsFilter zurückgeben

  3. WebMvcConfigurer umschreiben

Verwenden Sie die Annotation @CrossOrigin

    Manuell den Antwortheader festlegen. (Htt pServletResponse)
  1. Benutzerdefinierter Webfilter zur Erzielung domänenübergreifender
  2. Hinweis:
  3. CorFilter / WebMvConfigurer / @CrossOrigin erfordert zur Unterstützung SpringMVC 4.2 oder höher, entsprechend SpringBoot 1.3 oder höher
  4. Die ersten beiden Methoden sind globale CORS-Konfiguration, während es sich bei den letzten beiden um lokale CORS-Konfigurationen handelt. Wenn lokale domänenübergreifende Regeln verwendet werden, werden die globalen domänenübergreifenden Regeln außer Kraft gesetzt, sodass die Annotation @CrossOrigin für eine detailliertere domänenübergreifende Ressourcensteuerung verwendet werden kann.
  5. Tatsächlich besteht das ultimative Ziel unabhängig von der Lösung darin, den Antwortheader zu ändern, die vom Browser benötigten Daten zum Antwortheader hinzuzufügen und dann eine domänenübergreifende Umsetzung zu erreichen

    1 Geben Sie den neuen CorsFilter zurück (global domänenübergreifend)
  • Geben Sie in jeder Konfigurationsklasse ein neues CorsFIlter-Bean zurück und fügen Sie den Zuordnungspfad und den spezifischen CORS-Konfigurationspfad hinzu.

    @Configuration
    public class GlobalCorsConfig {
        @Bean
        public CorsFilter corsFilter() {
            //1. 添加 CORS配置信息
            CorsConfiguration config = new CorsConfiguration();
            //放行哪些原始域
            config.addAllowedOrigin("*");
            //是否发送 Cookie
            config.setAllowCredentials(true);
            //放行哪些请求方式
            config.addAllowedMethod("*");
            //放行哪些原始请求头部信息
            config.addAllowedHeader("*");
            //暴露哪些头部信息
            config.addExposedHeader("*");
            //2. 添加映射路径
            UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
            corsConfigurationSource.registerCorsConfiguration("/**",config);
            //3. 返回新的CorsFilter
            return new CorsFilter(corsConfigurationSource);
        }
    }
  • 2. WebMvcConfigurer neu schreiben (global domänenübergreifend)
  • @Configuration
    public class CorsConfig implements WebMvcConfigurer {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    //是否发送Cookie
                    .allowCredentials(true)
                    //放行哪些原始域
                    .allowedOrigins("*")
                    .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                    .allowedHeaders("*")
                    .exposedHeaders("*");
        }
    }

    3. Annotationen verwenden (lokal domänenübergreifend)

  • Verwenden Sie die Annotation @CrossOrigin: auf dem Controller (auf der Klasse), um anzugeben, dass alle Methoden der Klasse vorhanden sind Domänenübergreifend zulassen.
  • @RestController
    @CrossOrigin(origins = "*")
    public class HelloController {
        @RequestMapping("/hello")
        public String hello() {
            return "hello world";
        }
    }

    Verwenden Sie die Annotation @CrossOrigin für die Methode:

    @RequestMapping("/hello")
        @CrossOrigin(origins = "*")
         //@CrossOrigin(value = "http://localhost:8081") //指定具体ip允许跨域
        public String hello() {
            return "hello world";
        }
  • 4. Legen Sie den Antwortheader manuell fest (teilweise domänenübergreifend)

Verwenden Sie das HttpServletResponse-Objekt, um den Antwortheader (Access-Control-Allow-Origin) zur Autorisierung hinzuzufügen die Originaldomäne, hier Origin's Der Wert kann auch auf „*“ gesetzt werden, was bedeutet, dass alle erlaubt sind.

@RequestMapping("/index")
public String index(HttpServletResponse response) {
    response.addHeader("Access-Allow-Control-Origin","*");
    return "index";
}

5. Verwenden Sie einen benutzerdefinierten Filter, um domänenübergreifend zu erreichen. Schreiben Sie zunächst einen Filter, der MyCorsFilter.java genannt werden kann

Das obige ist der detaillierte Inhalt vonAuf welche Weise implementiert Spring Boot die domänenübergreifende Implementierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen