Rumah >Java >javaTutorial >Bagaimana untuk menyelesaikan masalah biasa menggunakan SpringSession dalam versi SpringBoot2.x

Bagaimana untuk menyelesaikan masalah biasa menggunakan SpringSession dalam versi SpringBoot2.x

王林
王林ke hadapan
2023-05-17 14:34:461138semak imbas

SpringBoot2.x SpringSession

Pengecualian ditemui semasa pemulaan konteks - membatalkan percubaan muat semula: org.springframework.beans.factory.BeanCreationException: Ralat semasa membuat bean dengan nama 'org.springframework.boot .session.SessionAutoConfiguration$ServletSessionRepositoryValidator': Seruan bagi kaedah init gagal;

Ini kerana kebergantungan spring-session-data-redis tiada.

Mengenai SpringBoot2 Apabila spring-session-core digunakan, spring-session-data-redis tidak dimuatkan.

Springboot 2.x ialah perangkap - silang domain menyebabkan masalah sesi

Pada masa ini, arus perdana dalam industri IT ialah pemisahan bahagian hadapan dan belakang, tetapi akan ada pasti menjadi masalah merentas domain semasa proses pemisahan.

Apakah itu merentas domain?

bermaksud apabila penyemak imbas meminta sumber daripada halaman web satu nama domain kepada nama domain yang lain, jika nama domain, port atau protokol berbeza, ia adalah merentas domain.

Senario yang dihadapi

Apabila kami menggunakan springboot + shrio +vue untuk projek pengurusan latar belakang, kami tidak boleh mendapatkan pengguna shiroSession yang sedang log masuk

Jadi kami menyiasatnya dikatakan dalam talian bahawa hanya membiarkan sesi berlalu apabila melintasi domain

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

Tetapi tetapan tetap tidak berfungsi Selepas sehari Baidu dan menyelesaikan masalah, saya kembali ke springboot 1.x dan tidak ada masalah seperti itu Barulah saya mencari punca peningkatan ke springboot 2.x menangkap pembunuh itu, kini saya boleh mengambil ubat yang betul.

Akhirnya menemui dunia baharu Dalam sesi musim bunga 2.x, SameSite sebenarnya diperkenalkan dalam Cookie. Okay, mari kita lihat apakah ini.

Kuki SameSite digunakan untuk menghalang serangan CSRF Ia mempunyai dua nilai: Strict, Lax

bermaksud mod ketat, menunjukkan bahawa kuki ini boleh digunakan di bawah. sebarang keadaan Tidak mustahil untuk menggunakannya sebagai kuki pihak ketiga; kuki tidak boleh dibawa untuk akses siaran merentas domain (ini Sangat menjengkelkan, antara muka pengesahan kami ialah permintaan POST)

SameSite = Strict:Ringkasan: Permintaan bahagian hadapan pergi ke bahagian belakang, dan sesi berbeza setiap kali, dan setiap kali ia adalah sesi baharu, menyebabkan tiada maklumat pengguna diperoleh

Penyelesaian:

SameSite = Lax:

Tetapkan SameSite kepada mengosongkan

@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);
    }
}

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah biasa menggunakan SpringSession dalam versi SpringBoot2.x. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam