Vue+SpringBoot+Shiroのクロスドメイン問題を解決する

Vue+SpringBoot+Shiroのクロスドメイン問題を解決する

初めて始めるときは、誰もがこの問題に遭遇すると思います。インターネットでいろいろ検索しましたが、役に立たず、完全には書かれていません。

ここに記録しておきます。皆さんの参考になれば幸いです

1. Vueフロントエンドを構成する

configの下のindex.jsでプロキシ情報を設定します。

注: ここでのクロスドメイン構成は開発環境でのみ有効です。パッケージ化とデプロイ後、このクロスドメインは機能しません。私は長い間ここで行き詰まっていました。Vueフロントエンドがパッケージ化されたら、nginxにデプロイするのが最善です。nginxを使用すると、クロスドメインの問題を直接解決できます。

1. クロスドメイン構成を開発する

プロキシテーブル: {
'/api': {
ターゲット: 'http://xxxx.com', //AddresschangeOrigin: true,
パス書き換え: {
'^/api': ''
  },
 }
},

main.js で Ajax プロキシ リクエストを構成する

var axios = require('axios')
axios.defaults.baseURL = '/api' // 環境

次に、リクエスト メソッドを記述するときに、メソッドの前に「/api」を追加します。これは、構成名に基づいています。構成した名前を記述します。

このようにして、フロントエンドのVue開発のクロスドメイン構成が完了しました。

2. 本番環境のクロスドメイン構成

まず、コードの構成を見てみましょう

インターネットで、あれこれ修正すべきだ、と書かれた記事や情報をたくさん読みましたが、事実はどれも同じです。 。 。 。

実際、index.jsのconfigの下にあるプロキシ情報を設定するだけで済みます。

プロキシテーブル: {
'/api/*': {
target: 'http://ドメイン名', //本番環境のアドレスにはhttpを追加する必要があります
変更元: true、
パス書き換え: {
'^/api': '/api'
  },
 }
},

上記では、ローカルクロスドメインを構成する際にaxiosのデフォルトのリクエストパスを設定しており、プロダクションパッケージを構成する必要はありません。

これでコードが設定されました。他には何も変更しないでください。次に npm run build を実行すると準備完了です。

残りの作業は nginx に任せることができます。私は Windows サービスに nginx を展開しました。インターネット上にはインストール手順が多数掲載されているので、ここでは詳細には触れません。

nginxをインストールしたら、いくつかの設定を行う必要があります

1. nginxの下のhtmlディレクトリの内容を削除します。

2. Vueパッケージdistをnginxのhtmlディレクトリにコピーします。

3. nginx の下の config ディレクトリで nginx.conf を設定します。設定内容は次のとおりです。

以下に説明があります。nginx アプリケーションのファイルディレクトリ名が変更されています。このディレクトリと同様に、nginx-1.xx で直接インストールします。上の図でルートパスを設定すると、/n でコンパイルの問題が発生する可能性があります。ここでは ProNginx に変更しました。好きな名前に変更できます。

これが私のnginxの設定のすべてです

#ユーザーnobody;
ワーカープロセス 1;

#error_log ログ/error.log;
#error_log ログ/error.log 通知;
#error_log ログ/error.log 情報;

#pid ログ/nginx.pid;


イベント {
    ワーカー接続 1024;
}


http {
    mime.types を含めます。
    デフォルトタイプ アプリケーション/オクテットストリーム;

    #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    # '$status $body_bytes_sent "$http_referer" '
    # '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log ログ/access.log メイン;

    ファイル送信オン;
    #tcp_nopush オン;

    #キープアライブタイムアウト 0;
    キープアライブタイムアウト65;

    #gzip オン;

サーバー{
        聞く 80;
        server_name フロントエンド サービスのドメイン名/IP;
        ルート D:/HWKJ/ProNginx/ProNginx/html/dist/;
        
        位置 / {
            インデックス index.php index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
            場所 /api/ {
            #書き換え^.+api/?(.*)$ /$1 break;
            #uwsgi_params を含めます。
            proxy_pass http://xxxbackgroundxxxx/api/;
            #springboot でリモート IP を取得する問題を解決する}
    }
}

設定後、nginxを起動します。nginxの操作コマンドをいくつか紹介します。

start nginx // 起動します nginx -s stop // stop は nginx をすぐに停止するため、関連情報が保存されない場合があります nginx -s quit // quit は nginx を完全に規則的に停止し、関連情報を保存します nginx -s reload // 構成情報が変更された場合は、このコマンドを使用して構成を再読み込みします nginx -s reopen // ログ ファイルを再度開きます nginx -v // Nginx のバージョンを表示します

このようにして、フロントエンドのVueプロダクションのクロスドメイン構成が完了します。

次に、Spring Bootの背景を設定します

2. Spring Bootを構成する

Spring Bootのみの場合は、情報を設定できます

org.springframework.boot.SpringBootConfiguration をインポートします。
org.springframework.boot.web.servlet.FilterRegistrationBean をインポートします。
org.springframework.context.annotation.Bean をインポートします。
org.springframework.context.annotation.Configuration をインポートします。
org.springframework.web.cors.CorsConfiguration をインポートします。
org.springframework.web.cors.UrlBasedCorsConfigurationSource をインポートします。
org.springframework.web.filter.CorsFilter をインポートします。
org.springframework.web.servlet.config.annotation.* をインポートします。


/**
 */
@構成
パブリッククラス MyWebConfigurer は WebMvcConfigurer を実装します {

@オーバーライド
   パブリック void addCorsMappings(CorsRegistry レジストリ) {
       registry.addMapping("/**") // クロスドメインアクセスを許可するパス。allowCredentials(true) // クッキーを送信するかどうか
               .allowedOriginPatterns("*") // クロスドメイン アクセスが許可されるオリジン。allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 許可されるリクエスト メソッド。allowedHeaders("*") // 許可されるヘッダー設定。maxAge(168000); // 事前チェック間隔}  
}

Spring Bootバックエンドがshiroと統合されている場合、上記の設定はshiroのリクエストには反映されず、ブラウザは依然としてクロスドメインを要求するので、次の方法を使用してクロスドメインアクセスを設定します。

org.springframework.boot.SpringBootConfiguration をインポートします。
org.springframework.boot.web.servlet.FilterRegistrationBean をインポートします。
org.springframework.context.annotation.Bean をインポートします。
org.springframework.context.annotation.Configuration をインポートします。
org.springframework.web.cors.CorsConfiguration をインポートします。
org.springframework.web.cors.UrlBasedCorsConfigurationSource をインポートします。
org.springframework.web.filter.CorsFilter をインポートします。
org.springframework.web.servlet.config.annotation.* をインポートします。


/**

  */
@構成
パブリッククラス MyWebConfigurer は WebMvcConfigurer を実装します {
    @ビーン
    パブリックフィルター登録Bean corsFilter() {
        最終的な UrlBasedCorsConfigurationSource ソース = 新しい UrlBasedCorsConfigurationSource();
        最終的な CorsConfiguration config = new CorsConfiguration();
        // ドメイン間での Cookie の送信を許可する config.setAllowCredentials(true);
        // #URI がサーバーにリクエストを送信できるようにします。* はすべてが許可されることを意味します。SpringMVC では、* に設定すると、現在のリクエスト ヘッダーの Origin に自動的に変換されます。
        config.addAllowedOriginPattern("*");
        // # アクセスが許可されたヘッダー情報、* はすべてを意味します config.addAllowedHeader("*");
        // 事前チェック リクエストのキャッシュ時間 (秒単位)。つまり、この期間中、同じクロスドメイン リクエストは再度事前チェックされません。config.setMaxAge(18000L);
        // リクエストの送信が許可されるメソッド。* はすべてが許可されることを意味します config.addAllowedMethod("OPTIONS");
        config.addAllowedMethod("HEAD");
        config.addAllowedMethod("GET");
        config.addAllowedMethod("PUT");
        config.addAllowedMethod("POST");
        config.addAllowedMethod("削除");
        config.addAllowedMethod("PATCH");
        ソースを登録します。CorsConfiguration("/**", config);

        FilterRegistrationBean Bean は、新しい FilterRegistrationBean (新しい CorsFilter (ソース)) を作成します。
        // リスナーの優先順位を設定する bean.setOrder(0);

        Bean を返します。
    }
}

Vue+SpringBoot+Shiroのクロスドメイン問題を解決するこの記事はこれで終わりです。Vue SpringBoot Shiroのクロスドメインに関する関連コンテンツについては、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue が springboot インターフェースを呼び出す際の 403 クロスドメイン問題を解決する
  • vue+springbootはプロジェクトのCORSクロスドメインリクエストを実装します
  • Vue+springboot フロントエンドとバックエンドの分離により、シングルサインオンのクロスドメイン問題解決を実現
  • フロントエンドとバックエンドを分離する際の Vue+springboot クロスドメインセッション+Cookie 無効化の問題を解決する
  • SpringBoot と Vue の相互作用におけるクロスドメイン問題の解決策

<<:  Ubuntu は scrcpy をインストールして、携帯電話の画面投影と制御を完了します (Ubuntu で QQ WeChat を使用する別の方法)

>>:  MySQL 8のパスワードを忘れた場合のベストな対処法の簡単な分析

推薦する

TCP 3 回目のハンドシェイク データ転送プロセス図

RFC793 ドキュメントの SYN フラグを持つプロセス パケットはデータを伝送できません。つま...

ウェブページにプレーヤーを埋め込む埋め込み要素の自動開始が false 無効

最近、仕事でサウンド ファイルを再生するために Web ページにプレーヤーを埋め込む必要に迫られまし...

CSS3 のボックス サイズ設定 (コンテンツ ボックスとボーダー ボックス) の詳細な説明

CSS3 のボックス サイズ設定 (content-box と border-box) CSS3 の...

ウェブサイトを構築するときは、UTF-8 または GB2312 エンコードを使用する必要がありますか?

外国のウェブサイトを開くと文字化けした文字が表示されることが多く、また、英語以外の外国のウェブサイト...

Docker execは複数のコマンドを実行します

docker exec コマンドは、実行中のコンテナ内でコマンドを実行できます。 docker ex...

MySQL 5.7 でルートパスワードを変更する方法

MySQL 5.7 以降では、多くのセキュリティ更新が追加されました。旧バージョンのユーザーは慣れて...

Dockerイメージをパッケージ化し、リモートサーバーにプッシュしてk8sにデプロイする方法

目次1. Dockerファイル2. pom 構成3. イメージプッシュ4. k8s デプロイメント前...

初心者のための HTML コーディングガイドライン 30 選

1. HTMLタグは常に閉じる前のページのソース コードでは、次のような記述がよく見られます。 &l...

ubuntu20.04 上の CLion2020.1.3 での ROS のインストールと設定の詳細な説明

1. CLionをダウンロード、インストール、アクティベートするオンラインで提供されるチュートリアル...

Dockerは公式Redisイメージをインストールし、パスワード認証を有効にします

参考: Docker 公式 Redis ドキュメント1. 特別なバージョン要件がある場合は、redi...

MySQLプロセス関数の一般的な使用例の分析

この記事では、例を使用して MySQL プロセス関数の一般的な使用方法を説明します。ご参考までに、詳...

Vueは完全な選択機能を実装しています

この記事の例では、完全な選択機能を実装するためのVueの具体的なコードを参考までに共有しています。具...

クリエイティブな会社概要ウェブページデザイン

ユニークな「About」ページ自分を他の人たちと差別化する素晴らしい方法は、本当にユニークな自己紹介...

Baidu デッドリンクファイルを作成する方法

Baidu によって定義されているデッドリンク形式には 2 種類あります。 1: XML形式のデッド...

この記事では、Viteがブラウザのリクエストに対して何を行うかを説明します。

目次動作原理:ブラウザは何をするのですか?ホストファイル index.htmlメイン.jsその他のベ...