🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Spring Security

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

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

Q&A

解決済

1回答

3470閲覧

SpringSecurity ログイン機能 formで変遷する時に必ずfailureUrlに飛ばされてしまう

mimi_129

総合スコア63

Spring Security

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

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

0グッド

0クリップ

投稿2021/03/20 13:16

編集2021/03/21 01:11

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

gpsoft

2021/03/22 23:43

「login?errorの画面にいってしまいます。」とのことですが、 そのときコンソールに何が表示されますか? 「確認」ボタンを押したあとのコンソールの内容を追記して頂けるとヒントになるかもしれません。
Luice

2021/03/23 00:23

>formからsubmitした際に値の判定を行わず このあたりの実装が無いので、なんとも言えないですが 認証処理が実装されていない or 認証情報を何も設定していないので認証エラーになっているのでは?
guest

回答1

0

自己解決

解決しました。

ご指摘通りにコンソールを確認してみると、
「Using generated security password」なる記述を見つけて検索しました。

https://www.aruse.net/entry/2019/02/10/153738
↑こちらの記事で結果的に解決に至りました。

認証用のパスワード等を設定していないと自動的に初期値が振られるようになっているんですね。。
全く気が付かなかったです。

コンソールに出ていたパスワード+userで無事狙い通りの画面に変遷する事が出来ました。

大変助かりました!

コメントいただいたお二方ありがとうございました。
先に進めそうです。

投稿2021/03/25 15:05

mimi_129

総合スコア63

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問