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の設定に詳しい方がいましたらご回答いただけないでしょうか?
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。