前提・実現したいこと
Springでログイン機能の実装を行っています。
(https://qiita.com/a-pompom/items/80b3f4bb6414e8678829)
↑こちらを参考にしました。
段階を踏んで実装を行っていて、
formからsubmitした際に値の判定を行わずに、
ただ他の画面に変遷するような機能をまず実装していました。
formで値を入力して、
successForwardUrlで対象のURL(hello)に飛んで欲しいのですが、
上手くいきません。
login?errorの画面にいってしまいます。
記述に何か不備があるのでしょうか?
どなたか分かる方がいれば、よろしくお願いします。
login.html
<!doctype html> <html xmlns:th="http://www.thymeleaf.org"> <head th:replace="~{layout/component :: head('ログイン')}"> <body> <th:block th:replace="~{layout/component :: header}"></th:block> <div class="container"> <th:block th:replace="~{layout/component :: container_top('ログイン')}"></th:block> <div class="row justify-content-start"> <form method="post" th:action="@{/sign_in}"> <table class="table table-bordered"> <tr> <td> <label>ログインID</label> </td> <td> <input type="text" name="username"> </td> </tr> <tr> <td> <label>パスワード</label> </td> <td> <input type="password" name="password"> </td> </tr> </table> <div class="mb-3"> <input type="submit" value="確認" class="btn btn-outline-secondary"> </div> </form> </div> </div> <footer th:replace="~{layout/component :: footer}"></footer> </body> </html>
WebSecurityConfig.java
package com.example.demo.login; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { //フォームの値と比較するDBから取得したパスワードは暗号化されているのでフォームの値も暗号化するために利用 @Bean public BCryptPasswordEncoder passwordEncoder() { BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder(); return bCryptPasswordEncoder; } @Override public void configure(WebSecurity web) throws Exception { web.ignoring().antMatchers( "/images/**", "/css/**", "/javascript/**" ); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") //ログインページはコントローラを経由しないのでViewNameとの紐付けが必要 .loginProcessingUrl("/sign_in") //フォームのSubmitURL、このURLへリクエストが送られると認証処理が実行される .usernameParameter("username") //リクエストパラメータのname属性を明示 .passwordParameter("password") .successForwardUrl("/hello") .failureUrl("/login?error") .permitAll() .and() .logout() .logoutUrl("/logout") .logoutSuccessUrl("/login?logout") .permitAll(); } }
MvcConfig.java
package com.example.demo.login; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class MvcConfig implements WebMvcConfigurer { /** * 「/login」というURLからlogin.htmlを呼び出す */ public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/login").setViewName("login"); } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー