ホームページ > Java > &#&チュートリアル > SpringBoot での Ajax クロスドメインと Cookie の失敗の問題を解決する方法

SpringBoot での Ajax クロスドメインと Cookie の失敗の問題を解決する方法

王林
リリース: 2023-05-26 09:56:13
転載
1574 人が閲覧しました

自分のプロジェクトのログイン登録ページを作成するとき、登録およびパスワード変更機能は電子メール検証を使用するため、バックエンドは検証コードを送信するときに応答データに Cookie を追加します

Cookie cookie = new Cookie(toEmail.split("@")[0],verCode);
cookie.setMaxAge(30*60);
response.addCookie(cookie);
ログイン後にコピー

その後、クリックしてパスワードを登録または変更すると、バックエンドはリクエストから Cookie を取得して電子メールと確認コード情報を取得します

Cookie[] cookies = request.getCookies();
ログイン後にコピー

ローカルでテストする場合、Cookie は応答に正しく追加でき、また、正しく取得できました

SpringBoot での Ajax クロスドメインと Cookie の失敗の問題を解決する方法

SpringBoot での Ajax クロスドメインと Cookie の失敗の問題を解決する方法

しかし、プロジェクトをクラウドにパッケージ化してから ajax アクセスを実行すると、問題が発生しました。Cookie の取得に失敗しました!

レスポンス ヘッダーには set-Cookie が明確にありますが、2 番目のリクエスト ヘッダーには Cookie が見つかりません。

サーバーは Cookie の取得に失敗し、エラーを報告します。Cookie を使用して、パスワードの登録と変更が無効です。ドキュメントを検索したところ、エラーの原因は Springboot と Ajax のクロスドメイン Cookie 損失の問題であることがわかりました。バックエンドは初めてなので、

私は自分の投稿のみを投稿します解決策はこちらです

1. Ajax リクエストは xmlhttp.withCredentials = true; #3. コントローラーの API で応答の応答ヘッダーを設定します。 キー

は「Access-Control-Allow-Origin」アクセス制御許可ソース、http リクエストヘッダー情報、許可リソース共有の設定 (クロスドメイン) ソース

var xmlhttp = new XMLHttpRequest();
xmlhttp.withCredentials = true;
xmlhttp.open("GET", readyUrl, true);
xmlhttp.send();
ログイン後にコピー

value は request.getHeader(" Origin") を表します。 プロトコルとドメイン名

ページの組み合わせ 現在リクエストされているリソースが存在する場所 これらは一緒に意味します 現在リクエストされているリソースのバックエンドへのアクセスを許可しますドメイン間のリソース

これら 3 つの部分を設定した後、Cookie を再度取得できます

2022 年 12 月 9 日更新:

見つかりましたクロスドメイン リクエスト フィルターを追加するためのより簡潔で便利な方法

Druid データ プール依存関係パッケージの StringUtils.isEmpty メソッドを使用しました。エラーが報告された場合は、自分で置き換えを記述するだけです

package com.crisp.myblog.config;
 
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 corsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                //是否发送Cookie
                .allowCredentials(true)
                //放行哪些原始域
                .allowedOriginPatterns("这里填你前端代码所在的域名:端口")
                .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}
ログイン後にコピー

以上がSpringBoot での Ajax クロスドメインと Cookie の失敗の問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート