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

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

新規登録して質問してみよう
ただいま回答率
85.47%
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プロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

919閲覧

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

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プロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2022/01/02 07:24

前提・実現したいこと

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

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

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

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

該当のソースコード

Java

1 @Override 2 protected void configure(HttpSecurity http) throws Exception { 3 http.authorizeRequests() 4 .antMatchers("/dashboard").authenticated() 5 .anyRequest().permitAll() 6 .and() 7 .oauth2Login() 8 .defaultSuccessUrl("/dashboard", true) 9 .tokenEndpoint() 10 .accessTokenResponseClient(new RestOAuth2AccessTokenResponseClient(restOperations)) 11 .and() 12 .userInfoEndpoint().userService(userService) 13 .and() 14 .and() 15 .logout() 16 .logoutRequestMatcher(new AntPathRequestMatcher("/logout")) 17 .logoutUrl("/logout") 18 .invalidateHttpSession(true) 19 .logoutSuccessUrl("/home?logout_success") 20 .and() 21 .sessionManagement() 22 .maximumSessions(1) 23 .expiredUrl("/session_expire"); 24 25 }

試したこと

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

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

gradle

1dependencies { 2 // Security 3 implementation 'org.springframework.boot:spring-boot-starter-security:2.6.2' // Spring Security 4 implementation 'org.springframework.session:spring-session-core:2.6.1' /// Spring Session 5 implementation 'org.springframework.boot:spring-boot-starter-oauth2-client:2.6.2' // Spring OAuth2 Client 6 implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.0.4.RELEASE' // Thymeleaf Spring Security 7 8 // Web 9 implementation 'org.springframework.boot:spring-boot-starter-web:2.6.2' // Spring Web 10 implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:2.6.2' // Thymeleaf 11 implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.0.0' // Thymeleaf layout 12 runtimeOnly 'org.springframework.boot:spring-boot-devtools:2.6.2' // Spring DevTools 13 14 // Test 15 testImplementation 'org.springframework.boot:spring-boot-starter-test:2.6.2' 16 testImplementation 'org.springframework.security:spring-security-test:5.5.1' 17}

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

redirect_urlを別URLに設定してjavascriptでredirectしたら解決しました。

投稿2022/01/02 10:22

light180

総合スコア161

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問