Rumah Java javaTutorial Bagaimana untuk menyelesaikan masalah rentas domain log masuk tunggal dengan memisahkan bahagian hadapan dan hujung belakang vue+springboot

Bagaimana untuk menyelesaikan masalah rentas domain log masuk tunggal dengan memisahkan bahagian hadapan dan hujung belakang vue+springboot

May 23, 2023 pm 02:55 PM
vue springboot

Kod adalah seperti berikut:

@Configuration
public class CorsConfiguration {
 @Bean
 public WebMvcConfigurer corsConfigurer() {
  return new WebMvcConfigurerAdapter() {
   @Override
   public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**")
      .allowedHeaders("*")
      .allowedMethods("*")
      .allowedOrigins("*");
   }
  };
 }
}
Salin selepas log masuk

Konfigurasi ini membenarkan semua pemetaan, semua pengepala permintaan, semua kaedah permintaan dan semua sumber. Selepas menukar konfigurasi, saya memulakan semula projek dengan tegas untuk melihat kesannya. Saya mendapati bahawa tiada cara untuk mengubah hala ke halaman log masuk tunggal Memandangkan ralat penyemak imbas disebabkan oleh merentas domain, saya mula-mula memuat naik kod pemintas log masuk saya

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 //用户已经登录
 if (request.getSession().getAttribute("user") != null) {
  return true;
 }
 //从单点登录返回之后的状态,本系统还不处于登录状态
 //根据code值去获取access_token,然后再根据access_token去获取用户信息,并将用户信息存到session中
 String state = request.getParameter("state");
 String uri = getUri(request);
 if (isLoginFromSSO(state)) {
  String code = request.getParameter("code");
  Object cacheUrl = request.getSession().getAttribute(state);
  if (cacheUrl == null) {
   response.sendRedirect(uri);
   return false;
  }
  HttpUtil client = new HttpUtil();
  StringBuffer sb = new StringBuffer();
  sb.append("code=").append(code)
    .append("&grant_type=").append("authorization_code")
    .append("&client_id=").append(SSOAuth.ClientID)
    .append("&client_secret=").append(SSOAuth.ClientSecret)
    .append("&redirect_uri=").append(URLEncoder.encode((String) cacheUrl));
  String resp = client.post(SSOAuth.AccessTokenUrl, sb.toString());
  Map<String, String> map = new Gson().fromJson(resp, Map.class);
  //根据access_token去获取用户信息
  String accessToken = map.get("access_token");
  HttpUtil http = new HttpUtil();
  http.addHeader("Authorization", "Bearer " + accessToken);
  String encrypt = http.get(SSOAuth.UserUrl);
  String userinfo = decryptUserInfo(encrypt);
  //封装成user对象
  User user = new Gson().fromJson(userinfo, User.class);
  request.getSession().setAttribute("user", user);
  return true;
 }
 //跳转到单点登录界面
 state = Const._SSO_LOGIN + Const.UNDERLINE + RandomUtil.getUUID();
 request.getSession().setAttribute(state, uri);
 String redirectUrl = buildAuthCodeUrl(uri, state);
 response.sendRedirect(redirectUrl);
 return false;
}
Salin selepas log masuk

Kemudian, gunakan vue bahagian hadapan untuk meminta antara muka log masuk bahagian belakang secara terus menggunakan

window.location.href=this.$api.config.baseUrl+"/system/user/login"
Salin selepas log masuk

Kemudian bahagian hadapan mengakses sistem dan boleh melompat terus ke halaman log masuk tunggal. Tetapi apabila saya memasukkan akaun dan kata laluan dan mengklik untuk log masuk, saya melompat kembali ke sistem dan mendapati bahawa semua antara muka data permintaan tidak dapat diakses secara normal mendapati bahawa semua permintaan tidak membawa maklumat pengguna dan diiktiraf oleh pemintas sebagai tidak dilog masuk, jadi semua permintaan tidak dapat diluluskan.

Mengapa saya log masuk dengan jelas dan pemintas juga menetapkan maklumat pengguna kepada sesi Mengapa kuki hilang? Saya memulakan permintaan sekali lagi dan mendapati bahawa JsessionId bagi setiap permintaan adalah berbeza. Saya telah menyemak banyak maklumat dan mendapati bahawa saya perlu menambah konfigurasi yang membolehkan maklumat pengesahan ditambahkan pada bahagian hadapan

axios.defaults.withCredentials=true;
Salin selepas log masuk

A. konfigurasi yang sepadan juga perlu dibuat di bahagian belakang allowCredentials(true );

@Bean
public WebMvcConfigurer corsConfigurer() {
 return new WebMvcConfigurerAdapter() {
  @Override
  public void addCorsMappings(CorsRegistry registry) {
   registry.addMapping("/**")
     .allowedHeaders("*")
     .allowedMethods("*")
     .allowedOrigins("*").allowCredentials(true);
  }
 };
}
Salin selepas log masuk

Selepas menambah konfigurasi ini, saya menjalankan proses operasi sekali lagi dan mendapati bahawa saya boleh melompat ke sistem seperti biasa selepas log masuk, dan halaman data juga dipaparkan secara normal.

Apabila saya fikir saya telah selesai, saya tiba-tiba mengklik pada halaman dan data tidak dapat dipaparkan seperti biasa, saya sangat keliru, saya dengan cepat F12 dan menemui kaedah permintaan yang tidak pernah saya lihat sebelum ini, iaitu OPTIONS permintaan. Ternyata kaedah permintaan ini jelas POST, mengapa ia menjadi PILIHAN? Oleh itu, saya memesan beberapa permintaan POST lain dan mendapati bahawa semuanya bertukar menjadi permintaan OPTIONS Saya keliru dan dengan cepat menyemak maklumat permintaan OPTIONS permintaan itu dilaksanakan, penyemak imbas akan memulakan permintaan pra-semakan dahulu Hanya selepas permintaan pra-semak lulus, permintaan rasmi boleh dilaksanakan. Selepas membacanya, saya tiba-tiba menyedari bahawa OPTIONS telah dipintas, jadi saya tidak lagi dapat melaksanakan permintaan POST saya Kemudian saya hanya membiarkan permintaan pra-semak berlalu. Hanya tambahkan penghakiman ini pada pemintas

//option预检查,直接通过请求
if ("OPTIONS".equals(request.getMethod())){
 return true;
}
Salin selepas log masuk

Dengan cara ini, jika pemintas mendapati bahawa permintaan itu adalah permintaan pra-semak, ia akan lulus terus dan permintaan POST seterusnya boleh dilaksanakan.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah rentas domain log masuk tunggal dengan memisahkan bahagian hadapan dan hujung belakang vue+springboot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan bootstrap di vue Cara menggunakan bootstrap di vue Apr 07, 2025 pm 11:33 PM

Menggunakan bootstrap dalam vue.js dibahagikan kepada lima langkah: Pasang bootstrap. Import bootstrap di main.js. Gunakan komponen bootstrap secara langsung dalam templat. Pilihan: Gaya tersuai. Pilihan: Gunakan pemalam.

Cara menambah fungsi ke butang untuk vue Cara menambah fungsi ke butang untuk vue Apr 08, 2025 am 08:51 AM

Anda boleh menambah fungsi ke butang VUE dengan mengikat butang dalam templat HTML ke kaedah. Tentukan kaedah dan tulis logik fungsi dalam contoh Vue.

Cara Menggunakan Watch di Vue Cara Menggunakan Watch di Vue Apr 07, 2025 pm 11:36 PM

Pilihan Watch di Vue.js membolehkan pemaju mendengar perubahan dalam data tertentu. Apabila data berubah, tontonkan mencetuskan fungsi panggil balik untuk melakukan paparan kemas kini atau tugas lain. Pilihan konfigurasinya termasuk segera, yang menentukan sama ada untuk melaksanakan panggilan balik dengan serta -merta, dan mendalam, yang menentukan sama ada untuk mendengarkan secara rekursif terhadap objek atau tatasusunan.

Apakah yang dimaksudkan dengan pembangunan Vue Multi-Page? Apakah yang dimaksudkan dengan pembangunan Vue Multi-Page? Apr 07, 2025 pm 11:57 PM

Pembangunan pelbagai halaman Vue adalah cara untuk membina aplikasi menggunakan rangka kerja VUE.JS, di mana permohonan dibahagikan kepada halaman berasingan: Penyelenggaraan kod: Memisahkan aplikasi ke dalam beberapa halaman boleh menjadikan kod lebih mudah untuk dikendalikan dan diselenggarakan. Modularity: Setiap halaman boleh digunakan sebagai modul yang berasingan untuk penggunaan semula dan penggantian mudah. Routing mudah: Navigasi antara halaman boleh diuruskan melalui konfigurasi penghalaan mudah. Pengoptimuman SEO: Setiap halaman mempunyai URL sendiri, yang membantu SEO.

Cara merujuk fail js dengan vue.js Cara merujuk fail js dengan vue.js Apr 07, 2025 pm 11:27 PM

Terdapat tiga cara untuk merujuk kepada fail JS dalam vue.js: Secara langsung tentukan jalan menggunakan & lt; skrip & gt; tag ;; import dinamik menggunakan cangkuk kitaran hayat yang dipasang (); dan mengimport melalui Perpustakaan Pengurusan Negeri VUEX.

Cara kembali ke halaman sebelumnya oleh Vue Cara kembali ke halaman sebelumnya oleh Vue Apr 07, 2025 pm 11:30 PM

Vue.js mempunyai empat kaedah untuk kembali ke halaman sebelumnya: $ router.go (-1) $ router.back () menggunakan & lt; router-link to = & quot;/& quot; Komponen Window.History.Back (), dan pemilihan kaedah bergantung pada tempat kejadian.

Cara Menggunakan Vue Traversal Cara Menggunakan Vue Traversal Apr 07, 2025 pm 11:48 PM

Terdapat tiga kaedah umum untuk vue.js untuk melintasi tatasusunan dan objek: Arahan V-untuk digunakan untuk melintasi setiap elemen dan membuat templat; Arahan V-mengikat boleh digunakan dengan V-untuk menetapkan nilai atribut secara dinamik untuk setiap elemen; dan kaedah .map boleh menukar elemen array ke dalam tatasusunan baru.

Cara melompat ke Div Vue Cara melompat ke Div Vue Apr 08, 2025 am 09:18 AM

Terdapat dua cara untuk melompat elemen div di Vue: Gunakan Vue Router dan tambahkan komponen router-link. Tambah pendengar acara @Click dan panggil ini. $ Router.push () kaedah untuk melompat.

See all articles