Q&A
前提
spring security5.7でログイン機能を追加しようとしています。
UdemyのSpring security入門と
https://www.docswell.com/s/MasatoshiTada/KGVY9K-spring-security-intro#p1
を参考に作成しました。
実現したいこと
メールアドレスでログイン可能にする。
発生している問題・エラーメッセージ
POST送信されたメールアドレスが引数のemailに入って欲しいのですが、現状何も入っていない状態になってしまっている。これを解決したい。
試したこと
デベロッパーツールを確認したところ、メールアドレスは送信されていることは確認できた。
htmlでのスペルミスがないかも確認したが、見つからなかった。
該当のソースコード
java
1@Service 2@RequiredArgsConstructor 3public class CustomUserDetailsService implements UserDetailsService { 4 5 private final LoginUserMapper loginUserMapper; 6 7 @Override 8 public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { 9 return loginUserMapper.findByEmail(email) 10 .map( 11 user -> new CustomUserDetails( 12 user.getEmail(), 13 user.getPassword() 14 ) 15 ) 16 .orElseThrow( 17 () -> new UsernameNotFoundException( 18 "Given email is not found." 19 ) 20 ); 21 } 22 23}
java
1@EnableWebSecurity 2@Configuration 3public class SecurityConfig { 4 5 @Bean 6 public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { 7 http.formLogin(login -> login 8 .loginProcessingUrl("/login") 9 .loginPage("/login") 10 .defaultSuccessUrl("/inventory/search") 11 .failureUrl("/login?error") 12 .permitAll() 13 ).logout(logout -> logout 14 .invalidateHttpSession(true) 15 .deleteCookies("JSESSIONID") 16 .logoutSuccessUrl("/login") 17 ).authorizeHttpRequests(authz -> authz 18 .requestMatchers(PathRequest.toStaticResources().atCommonLocations()) 19 .permitAll() 20 .mvcMatchers("/signup") 21 .permitAll() 22 .anyRequest().authenticated() 23 ); 24 return http.build(); 25 } 26 27 @Bean 28 public PasswordEncoder passwordEncoder() { 29 return new BCryptPasswordEncoder(); 30 } 31}
HTML
1<!DOCTYPE html> 2<html lang="ja" xmlns="http://www.w3.org/1999/xhtml" 3 xmlns:th="http://www.thymeleaf.org" 4 xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity5"> 5<head> 6 <meta charset="UTF-8"> 7 <title>Login Form</title> 8 <meta name="viewport" content="width=device-width, initial-scale=1"> 9 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> 10 <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.1/css/all.min.css" rel="stylesheet"> 11 <link th:href="@{/css/login.css}" rel="stylesheet"> 12</head> 13<body> 14 15<div class="container"> 16 <div class="row"> 17 <div class="col-md-6 offset-md-3"> 18 <h2 class="text-center text-dark mt-5">ログインフォーム</h2> 19 <div class="card my-5"> 20 <div th:if=${param.error}><p>メールアドレスもしくはパスワードが違います</p></div> 21 <form action="#" th:action="@{/login}" method="post" class="card-body cardbody-color p-lg-5"> 22 23 <div class="text-center"> 24 <img src="https://cdn.pixabay.com/photo/2016/03/31/19/56/avatar-1295397__340.png" 25 class="img-fluid profile-image-pic img-thumbnail rounded-circle my-3" 26 width="200px" alt="profile"> 27 </div> 28 29 <div class="mb-3"> 30 <input type="text" class="form-control" id="email" name="email" aria-describedby="emailHelp" 31 placeholder="メールアドレス"> 32 </div> 33 <div class="mb-3"> 34 <input type="password" class="form-control" id="password" name="password" placeholder="パスワード"> 35 </div> 36 <div class="text-center"><button type="submit" class="btn btn-color px-5 mb-5 w-100">ログイン</button></div> 37 <div id="emailHelp" class="form-text text-center mb-5 text-dark"> 38 登録されていない方はこちらから 39 <a href="/signup" class="text-dark fw-bold"> 登録画面</a> 40 </div> 41 </form> 42 </div> 43 44 </div> 45 </div> 46 </div> 47 48<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> 49<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script> 50 51</body> 52</html>
補足情報(FW/ツールのバージョンなど)
spring security 5.7