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

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

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

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

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Spring Boot

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

Q&A

0回答

1537閲覧

Spring Security・MyBatisを使った開発

Huncho_

総合スコア6

Spring Security

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

Spring MVC

Spring MVCとは、Javaを用いてWebアプリケーションを開発できるフレームワーク。アーキテクチャにMVCを採用しており、画面遷移と入出力パラメータの受け渡しの基本的な機能の他、ユーザーの送信したパラメータに対する入力チェックなどさまざまな機能を持ちます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Spring Boot

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

0グッド

0クリップ

投稿2021/07/03 03:41

現在、springフレームワーク、spring security、MyBatis、MySQLでログイン認証システムを作ろうとしています。

しかし、実行してみると、

An internal error occurred while trying to authenticate the user.

とエラーが出て、

Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): net.javaguides.springboot.techshare.auth.UserRepositry.identifyUser

と、原因はこれだと書いてあります。

ブラウザではこんな感じで表示されてます。

多分、DBにアクセスできてないのかなと思っておりまして、

この写真の、identifyUserメソッドにつきましては、下にコードを貼りましたのでご確認いただけると幸いです。

アーキテクチャに記載の使うクラスなどのコードを下に全て貼らさせていただきます。

IDEはeclipseです。

ディレクトリ構成は以下です。
[

アーキテクチャは、こんな感じですが、間違っていたら申し訳ありません。

コントローラーは以下です

Java

1//RootController.java 2 3package net.javaguides.springboot.techshare; 4 5import org.springframework.stereotype.Controller; 6import org.springframework.web.bind.annotation.RequestMapping; 7 8@Controller 9public class RootController { 10 11 @RequestMapping("/") 12 public String root() { 13 return "index"; 14 } 15} 16

HTML

1<!DOCTYPE html> 2<html> 3 4<head> 5 <meta charset="UTF-8"> 6 <title>Insert title here</title> 7</head> 8 9 <body> 10 11 <h1>Hello!!</h1> 12 13 </body> 14 15</html>

SecurityConfigurationクラス → ユーザー認証の設定を行うためのもの

java

1//SecurityConfiguration.java 2 3package net.javaguides.springboot.techshare.conf; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.context.annotation.Bean; 7import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 8import org.springframework.security.config.annotation.web.builders.HttpSecurity; 9import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 10import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 11import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 12import org.springframework.security.crypto.password.PasswordEncoder; 13 14import net.javaguides.springboot.techshare.auth.DatabaseUserDetailsService; 15 16 17@EnableWebSecurity 18public class SecurityConfigration extends WebSecurityConfigurerAdapter { 19 20 @Autowired 21 private DatabaseUserDetailsService userDetailsService; 22 23 @Override 24 protected void configure(AuthenticationManagerBuilder auth) throws Exception { 25 auth.userDetailsService(userDetailsService); 26 } 27 28 @Override 29 protected void configure(HttpSecurity http) throws Exception { 30 http.authorizeRequests() // 31 .anyRequest().authenticated() 32 .and() 33 .formLogin(); 34 } 35 36 @Bean 37 public PasswordEncoder passwordEncoder() { // 38 return new BCryptPasswordEncoder(); 39 } 40}

次に、User Detailsインターフェースを実装した、Userクラを作成

Java

1//User.java 2 3package net.javaguides.springboot.techshare.auth; 4import java.util.Collection; 5 6import org.springframework.security.core.GrantedAuthority; 7import org.springframework.security.core.userdetails.UserDetails; 8 9public class User implements UserDetails { 10 11 private static final long serialVersionUID = -4292831594774687625L; 12 13 private long id; 14 15 private String email; 16 17 private String username; 18 19 private String password; 20 21 @Override 22 public String getPassword() { 23 return password; 24 } 25 26 @Override 27 public String getUsername() { 28 return username; 29 } 30 31 public long getId() { 32 return id; 33 } 34 35 public void setId(long id) { 36 this.id = id; 37 } 38 39 public String getEmail() { 40 return email; 41 } 42 43 public void setEmail(String email) { 44 this.email = email; 45 } 46 47 @Override 48 public Collection<? extends GrantedAuthority> getAuthorities() { 49 // TODO 自動生成されたメソッド・スタブ 50 return null; 51 } 52 53 @Override 54 public boolean isAccountNonExpired() { 55 // TODO 自動生成されたメソッド・スタブ 56 return false; 57 } 58 59 @Override 60 public boolean isAccountNonLocked() { 61 // TODO 自動生成されたメソッド・スタブ 62 return false; 63 } 64 65 @Override 66 public boolean isCredentialsNonExpired() { 67 // TODO 自動生成されたメソッド・スタブ 68 return false; 69 } 70 71 @Override 72 public boolean isEnabled() { 73 // TODO 自動生成されたメソッド・スタブ 74 return false; 75 } 76 77}

次に、MyBatisの実装
Mapperインターフェースを実装したUserRepositryクラスを作成 <--正確なスペルはRepositoryだが、気にしなくて良いです

java

1//UserRepositry.java 2 3package net.javaguides.springboot.techshare.auth; 4 5import org.apache.ibatis.annotations.Mapper; 6 7@Mapper 8public interface UserRepositry { 9 10 public User identifyUser(String email); 11 12}

次に、MapperXMLファイルの作成

XML

1//UserRepositry.xml 2 3<?xml version = "1.0" encoding = "UTF-8"?> 4 5<!DOCTYPE mapper PUBLIC 6 "-//mybatis.org//DTD Mapper 3.0//EN" 7 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 8 9<mapper namespace="net.javaguides.springboot.techshare.auth.UserRepositry"> 10 11 <select id="identifyUser" parameterType="java.lang.String" resultMap="userDetails"> 12 13 <![CDATA[ 14 SELECT ID, 15 EMAIL, 16 NAME, 17 PASSWORD 18 19 FROM USERS; 20 21 22 ]]> 23 </select> 24 25 <resultMap type="net.javaguides.springboot.techshare.auth.User" id="userDetails"> 26 </result property="id" column="ID"> 27 </result property="email" column="EMAIL"> 28 </result property="username" column="NAME"> 29 </result property="password" column="PASSWORD"> 30 </resultMap> 31 32</mapper>

DBのテーブルのカラムは以下の通りです。

ID
EMAIL
NAME
PASSWORD

次に、User Details Serviceインンターフェースを実装した
DatabaseUserDetailsServiceクラスの作成

Java

1//DatabaseUserDetailsService.java 2 3package net.javaguides.springboot.techshare.auth; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.security.core.userdetails.UserDetails; 7import org.springframework.security.core.userdetails.UserDetailsService; 8import org.springframework.security.core.userdetails.UsernameNotFoundException; 9import org.springframework.stereotype.Service; 10 11@Service 12public class DatabaseUserDetailsService implements UserDetailsService { 13 14 @Autowired 15 private UserRepositry userRepositry; 16 17 @Override 18 public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 19 20 return userRepositry.identifyUser(username); 21 } 22}

この一連の実装は、誰かの動画を拝見してやっておりまして、

UserRepository.javaのidentifyUser(String email);
の引数には、DBのemailの値が入るという解釈であっていますでしょうか。

また、ブラウザの、ログイン画面のUserNameにはカラムのEMAILを入れ、PassWordには、カラムのPASSWORDを入れる仕組みにしていますが、
内部では、ブラウザで入力したEMAILとPASWWORDと、DBのEMAILとPASSWORDが一致してたら、index.htmlを返すよ、という動作をしているのでしょうか。

あまり仕組みもわかっておらず、エラー解決ができないため、ご教授頂けると幸いです。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問