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

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

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

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

Spring Boot

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

Q&A

解決済

1回答

2605閲覧

SpringSecurityにてAbstractUserDetailsAuthenticationProviderのretrieveUserメソッドが実行されない

Linkey

総合スコア77

Spring Security

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

Spring Boot

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

0グッド

0クリップ

投稿2021/04/11 03:44

Spring Securityについて勉強しているものです。

ログインページからユーザー名とパスワード入力して認証処理を実行させたいのですが、認証処理が呼び出されません。

ユーザー名とパスワードを入力して送信ボタンを押すとSecurityConfigクラスのretrieveUserメソッドが実行され
ユーザー認証チェックを行う流れにしようとしていますが
送信ボタンを押下しても再びログイン画面が表示されてしまいます。

実装したものは以下です。

login.html

html

1<!DOCTYPE html> 2<html xmlns:th="http:/www.thymeleaf.org"> 3<head> 4 <title>Login</title> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 6</head> 7<body> 8 <h1>ログインページ</h1> 9 10 <form action="/authenticate" method="post"> 11 ユーザー名:<input type="text" name="name" size="40"> 12 パスワード:<input type="password" name="password" size="40"> 13 <input type="submit" value="送信"> 14 </form> 15 16</body> 17</html>

SampleController.java

Java

1package com.example.sample; 2 3import org.springframework.stereotype.Controller; 4import org.springframework.web.bind.annotation.RequestMapping; 5 6@Controller 7public class SampleController { 8 9 @RequestMapping("/login") 10 String showLoginPage() { 11 System.out.println("ログイン画面を表示する。"); 12 return "login"; 13 } 14}

SecurityConfig.java

Java

1package com.example.sample.auth; 2 3import org.springframework.context.annotation.Configuration; 4import org.springframework.http.HttpMethod; 5import org.springframework.security.authentication.AuthenticationProvider; 6import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; 7import org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider; 8import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 9import org.springframework.security.config.annotation.web.builders.HttpSecurity; 10import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 11import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 12import org.springframework.security.core.AuthenticationException; 13import org.springframework.security.core.userdetails.UserDetails; 14 15@Configuration 16@EnableWebSecurity 17public class SecurityConfig extends WebSecurityConfigurerAdapter { 18 19 @Override 20 protected void configure(AuthenticationManagerBuilder auth) throws Exception { 21 auth.authenticationProvider(authProvider()); 22 } 23 24 public AuthenticationProvider authProvider() { 25 return new AbstractUserDetailsAuthenticationProvider() { 26 27 @Override 28 protected void additionalAuthenticationChecks(UserDetails userDetails, 29 UsernamePasswordAuthenticationToken authentication) throws AuthenticationException { 30 // 31 } 32 33 @Override 34 protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) 35 throws AuthenticationException { 36 System.out.println("ユーザー認証チェックを行います。"); 37 38 // TODO データベースを検索してユーザーチェックを行う。 39 return null; 40 } 41 42 }; 43 44 } 45 46 @Override 47 protected void configure(HttpSecurity http) throws Exception { 48 49 // URLアクセス設定 50 http.authorizeRequests() 51 .mvcMatchers(HttpMethod.GET, "/favicon.ico").permitAll() 52 .anyRequest().authenticated(); 53 54 //ログイン設定 55 http.formLogin() 56 .loginPage("/login") 57 .loginProcessingUrl("/authenticate") // ログイン処理URL 58 .usernameParameter("name") 59 .passwordParameter("password") 60 .permitAll(); 61 62 } 63 64} 65

pom.xml

XML

1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.4.4</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>SampleWebService2</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>SampleWebService2</name> 15 <description>Demo project for Spring Boot</description> 16 <properties> 17 <java.version>11</java.version> 18 </properties> 19 <dependencies> 20 <dependency> 21 <groupId>org.springframework.boot</groupId> 22 <artifactId>spring-boot-starter-data-jpa</artifactId> 23 </dependency> 24 <dependency> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-security</artifactId> 27 </dependency> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-web</artifactId> 31 </dependency> 32 33 <dependency> 34 <groupId>com.h2database</groupId> 35 <artifactId>h2</artifactId> 36 <scope>runtime</scope> 37 </dependency> 38 <dependency> 39 <groupId>org.springframework.boot</groupId> 40 <artifactId>spring-boot-starter-test</artifactId> 41 <scope>test</scope> 42 </dependency> 43 <dependency> 44 <groupId>org.springframework.security</groupId> 45 <artifactId>spring-security-test</artifactId> 46 <scope>test</scope> 47 </dependency> 48 <dependency> 49 <groupId>org.springframework.boot</groupId> 50 <artifactId>spring-boot-starter-thymeleaf</artifactId> 51 </dependency> 52 </dependencies> 53 54 <build> 55 <plugins> 56 <plugin> 57 <groupId>org.springframework.boot</groupId> 58 <artifactId>spring-boot-maven-plugin</artifactId> 59 </plugin> 60 </plugins> 61 </build> 62 63</project> 64

プロジェクト構成
イメージ説明

参考にしたURL
https://qiita.com/nannou/items/2363b37516f6228a4b9d
https://tech-lab.sios.jp/archives/8565

Spring Securityの設定に詳しい方がいましたらご回答いただけないでしょうか?
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

確認してみたところlogin.htmlのフォームにcsrfトークン値が埋め込まれていなくてMissingCsrfTokenExceptionが発生したため、ログインページが再表示される現象が発生しておりました。
フォームを以下のように書き直したところ、retrieveUserメソッドが呼ばれるようになりました。
<form method="post" th:action="@{/authenticate}">
ユーザー名:<input type="text" name="name" size="40">
パスワード:<input type="password" name="password" size="40">
<input type="submit" value="送信">
</form>

お騒がせしてしまって申し訳ありませんでした。

投稿2021/04/12 00:38

Linkey

総合スコア77

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問