ホームページ ウェブフロントエンド jsチュートリアル vue+springboot は、単一ポイントのクロスドメイン ログインをフロントエンドとバックエンドから分離します。

vue+springboot は、単一ポイントのクロスドメイン ログインをフロントエンドとバックエンドから分離します。

Apr 13, 2018 am 10:23 AM
ログイン

今回は、vue+springboot フロントエンドとバックエンド分離のシングルポイントクロスドメインログイン vue+springboot フロントエンドとフロントエンド分離のシングルポイントクロスの注意事項についてお届けします。ドメインログイン。実際のケースを見てみましょう。

私は現在バックエンド管理システムに取り組んでいます。フロントエンドは人気のある vue.js を使用し、バックエンドは springboot に基づいています。バックエンドシステムにはログイン機能がありませんが、統一ログインが必要なため、ログイン認証には.netプロジェクトチームの認証システムを利用しています。つまり、シングル サインオンを行うということです。シングル サインオンが何なのかわからない学生には、万能の Du Niang にアクセスすることをお勧めします。

最初にこの要件を受け取ったとき、私は軽蔑の念を持ってこう思いました。ログインするだけでは重要ではありません。しかし、開発プロセスは私にひどい平手打ちを食らわせました。 。 。 , したがって、将来そのような落とし穴に足を踏み込まないように、今回はこの教訓をしっかりと記録する必要があります。

私が最初に直面した問題は、ブラウザ コンソールが CORS を直接報告することでした。私は、長年の開発経験から、思い切ってバックグラウンドでクロスドメイン構成を設定しました。 この設定では、すべてのマッピング、すべてのリクエスト ヘッダー、すべての

リクエスト メソッド

、およびすべてのソースが許可されます。構成を変更した後、効果を確認するために思い切ってプロジェクトを再起動したところ、ブラウザー エラーの原因がクロスドメインであることがわかり、最初に のコードをアップロードしました。私のログインインターセプタ

その後、フロントエンド Vue は

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;
}
ログイン後にコピー

を使用してバックエンドの ログイン インターフェース をリクエストします。 フロントエンドがシステムにアクセスした後、シングル サインオン ページに直接ジャンプできます。しかし、アカウントとパスワードを入力してクリックしてログインすると、システムに戻って、すべてのリクエスト データ インターフェイスに正常にアクセスできないことがわかりました。デバッグでは、すべてのリクエストにユーザー情報が含まれておらず、インターセプターによって認識されたことがわかりました。ログインしていないため、すべてのリクエストが通過できませんでした。

明らかにログインしているのに、インターセプターによってユーザー情報もセッションに設定されるのはなぜですか? Cookie が消えてしまうのはなぜですか?再度リクエストを開始したところ、各リクエストの JsessionId が異なることがわかりました。多くの情報を確認したところ、フロントエンドに認証情報を追加できるように構成を追加する必要があることがわかりました

window.location.href=this.$api.config.baseUrl+"/system/user/login"
ログイン後にコピー

。 バックエンドも対応する設定を行う必要がありますallowCredentials(true);

axios.defaults.withCredentials=true;
ログイン後にコピー

この設定を追加した後、再度運用プロセスを実行したところ、ログイン後は正常にシステムにジャンプでき、ページデータも正常に表示されることがわかりました。

終わったと思ったら、いきなりページをクリックしたら正常にデータが表示されなくなり、慌ててF12を押すと、OPTIONSリクエストという、これまでに見たことのないリクエストメソッドが表示されていました。リクエストメソッドが明らかに POST になったのですが、なぜ OPTIONS になったのでしょうか?そこで、他の POST リクエストをいくつか注文しましたが、それらはすべて OPTIONS リクエストになっていることがわかり、混乱してすぐに OPTIONS リクエストの情報を確認しました。OPTIONS リクエストは、正式な Before では「事前チェック リクエスト」と呼ばれているとのことです。リクエストが実行されると、ブラウザはまず事前チェック リクエストを開始し、事前チェック リクエストが通過した後にのみ正式なリクエストを実行できます。これを読んだ後、OPTIONS がインターセプトされたため、POST リクエストを実行できなくなったことに突然気づきました。その後、事前チェックリクエストを通過させました。この判断をインターセプターに追加するだけです

@Bean
public WebMvcConfigurer corsConfigurer() {
 return new WebMvcConfigurerAdapter() {
  @Override
  public void addCorsMappings(CorsRegistry registry) {
   registry.addMapping("/**")
     .allowedHeaders("*")
     .allowedMethods("*")
     .allowedOrigins("*").allowCredentials(true);
  }
 };
}
ログイン後にコピー

このようにして、インターセプターはリクエストが事前チェックリクエストであることを認識し、それを直接渡し、次の POST リクエストを実行できるようになります。

この記事の事例を読んだ後は、この方法を習得したと思います。さらに興味深い情報については、php 中国語 Web サイトの他の関連記事に注目してください。

推奨読書:

vueのプロジェクト構造の説明


vue ショッピングカートの小さなボール放物線効果の実現についての詳細な説明


以上がvue+springboot は、単一ポイントのクロスドメイン ログインをフロントエンドとバックエンドから分離します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

壁紙エンジンで別のアカウントにログインした後、他の人の壁紙をダウンロードした場合はどうすればよいですか? 壁紙エンジンで別のアカウントにログインした後、他の人の壁紙をダウンロードした場合はどうすればよいですか? Mar 19, 2024 pm 02:00 PM

自分のコンピュータで他人の Steam アカウントにログインし、その他人のアカウントに壁紙ソフトウェアがインストールされている場合、自分のアカウントに切り替えた後、Steam は他人のアカウントに登録されている壁紙を自動的にダウンロードします。 Steam クラウドの同期をオフにします。別のアカウントにログインした後に、wallpaperengine が他の人の壁紙をダウンロードした場合の対処方法 1. 自分の steam アカウントにログインし、設定でクラウド同期を見つけて、steam クラウド同期をオフにします。 2. 以前にログインしたことのある他の人の Steam アカウントにログインし、壁紙クリエイティブ ワークショップを開き、サブスクリプション コンテンツを見つけて、すべてのサブスクリプションをキャンセルします。 (将来壁紙が見つからない場合は、まず壁紙を収集してからサブスクリプションをキャンセルできます) 3. 自分の Steam に戻ります。

小紅書で以前のアカウントにログインするにはどうすればよいですか?再接続後に元の番号が失われた場合はどうすればよいですか? 小紅書で以前のアカウントにログインするにはどうすればよいですか?再接続後に元の番号が失われた場合はどうすればよいですか? Mar 21, 2024 pm 09:41 PM

ソーシャル メディアの急速な発展に伴い、Xiaohongshu は多くの若者が生活を共有し、新製品を探索するための人気のプラットフォームになりました。使用中に、ユーザーが以前のアカウントにログインできない場合があります。この記事では、Xiaohongshuで古いアカウントにログインできない問題の解決方法と、バインドを変更した後に元のアカウントが失われる可能性への対処方法について詳しく説明します。 1. 小紅書の前のアカウントにログインするにはどうすればよいですか? 1. パスワードを取得してログインします。Xiaohongshu に長期間ログインしない場合、アカウントがシステムによってリサイクルされる可能性があります。アクセス権を復元するには、パスワードを取得してアカウントへのログインを再試行します。操作手順は以下の通りです。 (1) 小紅書アプリまたは公式サイトを開き、「ログイン」ボタンをクリックします。 (2) 「パスワードを取得」を選択します。 (3) アカウント登録時に使用した携帯電話番号を入力してください

『陰陽師』茨木童子のコレクションスキンはログインするとすぐに入手できるほか、新スキン「禅心雲鏡」も近日登場予定! 『陰陽師』茨木童子のコレクションスキンはログインするとすぐに入手できるほか、新スキン「禅心雲鏡」も近日登場予定! Jan 05, 2024 am 10:42 AM

山野に数千の亡霊の叫び声が響き、武器を取り交わす音が消え、闘志を胸に山を越えて駆けつけた亡霊将軍たちは火をラッパに吹き、数百の亡霊を率いて突撃した。戦いへ。 【烈火の梅蓮・茨木童子コレクションスキンがオンライン販売開始】 炎が燃え盛る幽霊の角、荒々しい闘志がほとばしる金色の瞳、そしてシャツを彩る白翡翠の甲冑は、偉大なる者の手に負えない野性的な勢いを表しています。悪魔。雪のように白くはためく袖には、赤い炎が絡みつき、金の模様が刻まれ、紅く幻想的な色を灯した。凝縮された悪魔の力によって形成された意志のウィスプが咆哮し、激しい炎が山を揺るがしました煉獄から戻った悪魔と幽霊、一緒に侵入者を懲らしめましょう。 【専用ダイナミックアバターフレーム・烈火の炎のバイリアン】 【専用イラスト・花火将軍魂】 【伝記鑑賞】 【入手方法】 茨木童子のコレクションスキン・烈火の炎のバイリアンは、12月28日メンテナンス後よりスキンストアに登場いたします。

バックグラウンドログインの問題の解決策を明らかにする バックグラウンドログインの問題の解決策を明らかにする Mar 03, 2024 am 08:57 AM

Discuz のバックグラウンド ログイン問題の解決策が明らかになりました。特定のコード サンプルが必要です。インターネットの急速な発展に伴い、Web サイトの構築がますます一般的になってきました。Discuz は、一般的に使用されるフォーラム Web サイト構築システムとして、次のユーザーに好まれています。多くのウェブマスター。しかし、その強力な機能ゆえに、Discuz を使用する際にバックグラウンドでのログインの問題などの問題が発生することがあります。本日は、Discuz のバックグラウンド ログインの問題の解決策を明らかにし、具体的なコード例を提供します。

Kuaishou PC 版へのログイン方法 - Kuaishou PC 版へのログイン方法 Kuaishou PC 版へのログイン方法 - Kuaishou PC 版へのログイン方法 Mar 04, 2024 pm 03:30 PM

最近、何人かの友人が Kuaishou コンピュータ版へのログイン方法を尋ねてきました。ここでは Kuaishou コンピュータ版へのログイン方法を説明します。必要な友人が来て、さらに詳しく学ぶことができます。ステップ 1: まず、コンピュータのブラウザで Baidu の Kuaishou 公式 Web サイトを検索します。ステップ 2: 検索結果リストの最初の項目を選択します。ステップ 3: Kuaishou 公式ウェブサイトのメインページに入った後、ビデオオプションをクリックします。ステップ 4: 右上隅にあるユーザーのアバターをクリックします。ステップ 5: QR コードをクリックして、ポップアップ ログイン メニューでログインします。ステップ 6: 次に、携​​帯電話で Kuaishou を開き、左上隅のアイコンをクリックします。ステップ 7: QR コードのロゴをクリックします。ステップ 8: My QR コード インターフェイスの右上隅にあるスキャン アイコンをクリックした後、コンピューター上の QR コードをスキャンします。ステップ 9: 最後に、Kuaishou のコンピュータ版にログインします。

Quarkで2つのデバイスにログインする方法 Quarkで2つのデバイスにログインする方法 Feb 23, 2024 pm 10:55 PM

Quark を使用して 2 つのデバイスにログインするにはどうすればよいですか? Quark Browser は 2 つのデバイスへの同時ログインをサポートしていますが、ほとんどの友人は Quark Browser を使用して 2 つのデバイスにログインする方法を知りません。次に、エディターがユーザー Quark にログインさせます。メソッド グラフィック チュートリアル、興味のあるユーザーはぜひ見に来てください。 Quark Browserの使い方チュートリアル Quark 2台のデバイスにログインする方法 1. まずQuark Browser APPを開き、メインページで[Quark Network Disk]をクリックします; 2. 次に、Quark Network Diskインターフェイスに入り、[My Backup]サービス機能を選択します; 3. 最後に、[デバイスの切り替え]を選択して、2 台の新しいデバイスにログインします。

Baidu Netdisk Web バージョンに入るにはどうすればよいですか? Baidu Netdisk Web 版ログイン入口 Baidu Netdisk Web バージョンに入るにはどうすればよいですか? Baidu Netdisk Web 版ログイン入口 Mar 13, 2024 pm 04:58 PM

Baidu Netdisk は、さまざまなソフトウェア リソースを保存できるだけでなく、他のユーザーと共有することもできます。複数端末の同期をサポートしています。コンピュータにクライアントがダウンロードされていない場合は、Web バージョンに入ることができます。では、Baidu Netdisk Web バージョンにログインするにはどうすればよいでしょうか?詳しい紹介を見てみましょう。 Baidu Netdisk Web バージョンのログイン入り口: https://pan.baidu.com (リンクをコピーしてブラウザで開きます) ソフトウェアの紹介 1. 共有 ファイル共有機能を提供し、ユーザーはファイルを整理し、必要な友人と共有できます。 2. クラウド: メモリをあまり消費せず、ほとんどのファイルはクラウドに保存されるため、コンピュータのスペースを効果的に節約できます。 3. フォト アルバム: クラウド フォト アルバム機能をサポートし、写真をクラウド ディスクにインポートし、全員が閲覧できるように整理します。​

Windows 11/10にGitHub Copilotをインストールする方法 Windows 11/10にGitHub Copilotをインストールする方法 Oct 21, 2023 pm 11:13 PM

GitHubCopilot は、コードを適切に予測してオートコンプリートする AI ベースのモデルを備えた、プログラマーにとっての次のレベルです。ただし、この AI の天才をデバイスに導入して、コーディングをさらに簡単にする方法を疑問に思っているかもしれません。ただし、GitHub の使用は必ずしも簡単ではなく、初期設定プロセスは難しいものです。したがって、Windows 11、10 の VSCode に GitHub Copilot をインストールして実装する方法に関するステップバイステップのチュートリアルを作成しました。 Windows に GitHubCopilot をインストールする方法 このプロセスにはいくつかの手順があります。したがって、今すぐ以下の手順に従ってください。ステップ 1 – 最新バージョンの Visual Studio がコンピューターにインストールされている必要があります

See all articles