質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

解決済

Spring SecurityのOAuth2で処理中に別の画面を表示する

light180
light180

総合スコア161

Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1回答

0評価

0クリップ

233閲覧

投稿2022/01/02 07:24

前提・実現したいこと

Spring BootとSpring Securityで、Discord OAuth2を用いてログインできるシステムを作成しています。

発生している問題・エラーメッセージ

処理中に別の画面を表示する方法がわかりません。

背景としては、Discord OAuth2ではOAuth2の処理の間( Spring側のloadUserなどの処理 )の間Discordの認証画面が出たままになります。
認証がうまくできていないと思ってもう一度クリックしてしまうと、重複したリクエストとしてエラーが出てしまいます。
そこで、/login/oauth2/code/discord?token=??? にリクエストが投げられた際に、「処理中です」というような画面を表示してからログイン処理を行うようにしたいです。

該当のソースコード

Java

@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/dashboard").authenticated() .anyRequest().permitAll() .and() .oauth2Login() .defaultSuccessUrl("/dashboard", true) .tokenEndpoint() .accessTokenResponseClient(new RestOAuth2AccessTokenResponseClient(restOperations)) .and() .userInfoEndpoint().userService(userService) .and() .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/logout")) .logoutUrl("/logout") .invalidateHttpSession(true) .logoutSuccessUrl("/home?logout_success") .and() .sessionManagement() .maximumSessions(1) .expiredUrl("/session_expire"); }

試したこと

configureのOAuth2LoginConfigurer.loginProcessingUrl (標準では/login/oauth2/code/discord)を/processingに設定し、ControllerとMvcConfigurerでresources/tempaltes/processing.htmlが表示されるようにしてみましたが、変わりませんでした。
(Callback先はちゃんと変わっていましたが、loadUserなどの処理の間もDiscordの画面のままでした)

補足情報(FW/ツールのバージョンなど)

gradle

dependencies { // Security implementation 'org.springframework.boot:spring-boot-starter-security:2.6.2' // Spring Security implementation 'org.springframework.session:spring-session-core:2.6.1' /// Spring Session implementation 'org.springframework.boot:spring-boot-starter-oauth2-client:2.6.2' // Spring OAuth2 Client implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.0.4.RELEASE' // Thymeleaf Spring Security // Web implementation 'org.springframework.boot:spring-boot-starter-web:2.6.2' // Spring Web implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:2.6.2' // Thymeleaf implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.0.0' // Thymeleaf layout runtimeOnly 'org.springframework.boot:spring-boot-devtools:2.6.2' // Spring DevTools // Test testImplementation 'org.springframework.boot:spring-boot-starter-test:2.6.2' testImplementation 'org.springframework.security:spring-security-test:5.5.1' }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Spring Security

Spring Securityは、Springのサブプロジェクトの一つでWebアプリケーションに必要な機能を追加します。正規ユーザーであるかを確認するための「認証機能」と、ユーザーのアクセスを制御する「認可機能」を簡単に追加することが可能です。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。