Heim  >  Artikel  >  Java  >  So lösen Sie häufige Probleme mit SpringSession in der SpringBoot2.x-Version

So lösen Sie häufige Probleme mit SpringSession in der SpringBoot2.x-Version

王林
王林nach vorne
2023-05-17 14:34:461080Durchsuche

SpringBoot2.x SpringSession-Falle

Ausnahme während der Kontextinitialisierung aufgetreten – Aktualisierungsversuch wird abgebrochen: org.springframework.beans.factory.BeanCreationException: Fehler beim Erstellen der Bean mit dem Namen „org.springframework.boot.autoconfigure.session.SessionAutoConfiguration$ServletSessionRepositoryValidator“: Der Aufruf der Init-Methode ist fehlgeschlagen; die verschachtelte Ausnahme ist org.springframework.boot.autoconfigure.session.SessionRepositoryUnavailableException: Es konnte kein Sitzungs-Repository automatisch konfiguriert werden. Überprüfen Sie Ihre Konfiguration (Sitzungsspeichertyp ist „redis“). Dies liegt daran, dass es fehlt Abhängigkeit von Spring-Session-Data-Redis.

Über SpringBoot2. -data-redis wird geladen und der Benutzer muss die Abhängigkeiten zwischen spring-session und redis hinzufügen.

Fallstricke bei Springboot 2.x – Domänenübergreifend führt zu Sitzungsproblemen

Derzeit besteht der Mainstream in der IT-Branche darin, Front-End und Back-End zu trennen, aber während des Trennungsprozesses wird es definitiv zu domänenübergreifenden Problemen kommen .

Was ist domänenübergreifend?

bedeutet, dass es sich um eine domänenübergreifende Anforderung handelt, wenn der Browser Ressourcen von einer Webseite mit einem Domänennamen zu einem anderen Domänennamen anfordert und der Domänenname, der Port oder das Protokoll unterschiedlich sind.

Aufgetretene Szenen

Wenn wir Springboot + Shrio +Vue verwenden, um Hintergrundverwaltungsprojekte durchzuführen, können wir den aktuell angemeldeten Benutzer von shiroSession nicht abrufen.

Also haben wir nachgesehen und online gesagt, dass wir die Sitzung einfach zulassen können pass beim Überqueren von Domänen.

Backend

 <!--SpringSession依赖-->
 <dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-core</artifactId>
 </dependency>
 <!--SpringSessionRedis依赖-->
 <dependency>
  <groupId>org.springframework.session</groupId>
  <artifactId>spring-session-data-redis</artifactId>
 </dependency>

Frontend

#使用使用Redis缓存session数据
spring.session.store-type=REDIS
#Redis服务器地址
spring.redis.host=127.0.0.1
#Redis服务器端口号
spring.redis.port=6379
Aber es funktioniert immer noch nicht, nachdem es eingerichtet wurdeNach einem Tag Baidu und Fehlerbehebung habe ich auf Springboot 1.x zurückgesetzt und dort Es gab kein solches Problem, also habe ich beschlossen, auf Springboot zu aktualisieren. Die Ursache für Springboot 2.x ist nun, der Mörder wurde gefasst, jetzt kann ich die richtige Medizin verschreiben. Ich bin online gegangen, um die Probleme im Zusammenhang mit dem Upgrade von Springboot auf 2.x zu lesen Frühlingssitzung.

Endlich eine neue Welt entdeckt, SameSite wird tatsächlich in Cookie eingeführt. Okay, schauen wir uns an, was das ist.

SameSite-Cookie wird verwendet, um CSRF-Angriffe zu verhindern. Es hat zwei Werte: Strict, Lax.

Drittanbieter-Cookie;

SameSite = Lax:

bedeutet entspannter Modus. Es kann als Drittanbieter-Cookie in GET-Anfragen verwendet werden, kann jedoch keine Cookies für den domänenübergreifenden Beitragszugriff übertragen. Das ist sehr schmerzhaft. Ja, unsere Verifizierungsschnittstelle ist die POST-Anfrage.)

Lösung:

SameSite = Strict:

意为严格模式,表明这个cookie在任何情况下都不可能作为第三方cookie;

SameSite = Lax: SameSite auf leer setzen

@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowCredentials(true);
        // 允许任何域名使用
        corsConfiguration.addAllowedOrigin("*");
        // 允许任何头
        corsConfiguration.addAllowedHeader("*");
        // 允许任何方法(post、get等)
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setMaxAge(3600L);
        return corsConfiguration;
    }
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 对接口配置跨域设置
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
}

Das obige ist der detaillierte Inhalt vonSo lösen Sie häufige Probleme mit SpringSession in der SpringBoot2.x-Version. 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