前提・実現したいこと
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' }
まだ回答がついていません
会員登録して回答してみよう