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

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

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

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

Spring MVC

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

MyBatis

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

Spring Boot

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

Q&A

解決済

1回答

1076閲覧

MVCモデルを使ったspring securityのDBでの認証方法について

KAWASEMI

総合スコア17

Spring Security

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

Spring MVC

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

MyBatis

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

Spring Boot

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

0グッド

0クリップ

投稿2023/05/01 12:32

実現したいこと

postgreSQLのデータベースを使ってユーザー登録、ログインができるwebアプリを作りたい

前提

spring boot ,spring security ,flyway ,mybatis ,postgresqlを使ってログイン機能付きのwebアプリを作っています。メモリでの認証までは上手くいったのですがDBを使用しての認証方法が全く分からず、手探りでやっては見たのですが、全くうまくいきませんでした。MVCを使わないドキュメントはいくつか見つかったのですが他の部分との関係でどうしてもMVCで完成させたいです。ご教授いただければ幸いです。

発生している問題・エラーメッセージ

Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): Nsystem.sougaku.Mappars.userDataMapper.login

該当のソースコード

java

1@Controller 2@RequestMapping("/") 3public class loginController { 4 @GetMapping 5 public String getLoginPage(){ 6 return "login"; 7 } 8}

java

1package Nsystem.sougaku.Domains; 2 3import lombok.Data; 4import org.springframework.security.core.GrantedAuthority; 5import org.springframework.security.core.userdetails.UserDetails; 6 7import java.io.Serial; 8import java.util.Collection; 9 10@Data 11public class userData implements UserDetails { 12 @Serial 13 private int id; 14 private String username; 15 private int studentNumber; 16 private String password; 17 private Collection<GrantedAuthority> authorities; 18 private int HorS; 19 20 public userData(String username, int studentNumber, String password, Collection<GrantedAuthority> authorities, int HorS) { 21 this.username = username; 22 this.studentNumber = studentNumber; 23 this.password = password; 24 this.authorities = authorities; 25 this.HorS = HorS; 26 } 27 28 @Override 29 public Collection<? extends GrantedAuthority> getAuthorities() { 30 return authorities; 31 } 32 @Override 33 public String getPassword() { 34 return password; 35 } 36 @Override 37 public String getUsername() { 38 return username; 39 } 40 @Override 41 public boolean isAccountNonExpired() { 42 return true; 43 } 44 @Override 45 public boolean isAccountNonLocked() { 46 return true; 47 } 48 @Override 49 public boolean isCredentialsNonExpired() { 50 return true; 51 } 52 @Override 53 public boolean isEnabled() { 54 return true; 55 } 56}

java

1package Nsystem.sougaku.Mappars; 2 3import Nsystem.sougaku.Domains.userData; 4import org.apache.ibatis.annotations.Mapper; 5 6@Mapper 7public interface userDataMapper { 8 userData login(String userName); 9 void addUser(userData user); 10}

java

1package Nsystem.sougaku.Security; 2 3import org.springframework.boot.autoconfigure.security.servlet.PathRequest; 4import org.springframework.context.annotation.Bean; 5import org.springframework.context.annotation.Configuration; 6import org.springframework.security.config.annotation.web.builders.HttpSecurity; 7import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 8import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; 9import org.springframework.security.crypto.password.PasswordEncoder; 10import org.springframework.security.web.SecurityFilterChain; 11 12@EnableWebSecurity 13@Configuration 14public class SecurityConfig { 15 16 @Bean 17 public PasswordEncoder passwordEncoder(){ 18 return new BCryptPasswordEncoder(); 19 } 20 21 @Bean 22 public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{ 23 http.formLogin(login -> login 24 .loginProcessingUrl("/login") 25 .loginPage("/") 26 .defaultSuccessUrl("/home") 27 .failureUrl("/login?error") 28 .permitAll() 29 ).logout(logout -> logout 30 .logoutUrl("/logout") 31 .logoutSuccessUrl("/") 32 ).authorizeHttpRequests(authz -> authz 33 .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() 34 .requestMatchers("/").permitAll() 35 .requestMatchers("/general").hasRole("GENERAL") 36 .requestMatchers("/admin").hasRole("ADMIN") 37 .anyRequest().authenticated() 38 ); 39 return http.build(); 40 } 41 } 42```java 43import Nsystem.sougaku.Domains.userData; 44import Nsystem.sougaku.Mappars.userDataMapper; 45import org.springframework.beans.factory.annotation.Autowired; 46import org.springframework.security.core.userdetails.User; 47import org.springframework.security.core.userdetails.UserDetails; 48import org.springframework.security.core.userdetails.UserDetailsService; 49import org.springframework.security.core.userdetails.UsernameNotFoundException; 50import org.springframework.stereotype.Service; 51 52import java.util.Collections; 53 54@Service 55public class UserService implements UserDetailsService { 56 private final userDataMapper userDataMapper; 57 58 @Autowired 59 public UserService(userDataMapper userDataMapper) { 60 this.userDataMapper = userDataMapper; 61 } 62 63 @Override 64 public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException { 65 userData userdata = userDataMapper.login(userName); 66 return new User(userdata.getUsername(), userdata.getPassword(), Collections.emptyList()); 67 } 68}

Mapper.xml

1<?xml version="1.0" encoding="UTF-8" ?> 2<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3<mapper namespace="Nsystem.sougaku.Mappars.userDataMapper"> 4 <resultMap id="userDataResultMap" type="Nsystem.sougaku.Domains.userData"> 5 <result property="id" column="id"/> 6 <result property="username" column="userName"/> 7 <result property="studentNumber" column="studentNumber"/> 8 <result property="password" column="password"/> 9 <result property="authorities" column="authority"/> 10 <result property="HorS" column="HorS"/> 11 </resultMap> 12 <select id="login" resultMap="userDataResultMap" parameterType="String"> 13 SELECT * FROM userData WHERE userName = #{userName}; 14 </select> 15</mapper>

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

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

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

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

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

guest

回答1

0

ベストアンサー

修正方法は下記のどちらかでいけるみたいです。
・generatorConfig.xmlの中でsqlMapGeneratorとjavaClientGeneratorのtargetPackageの値が一致するように修正
・application.propertiesでMapperの場所を明示的に指定する

下記URLを参考にしたので、詳細はこちらを見て実施してみてください。
https://qiita.com/ishioka0222/items/b595e196f2f86ad5cee8

投稿2023/05/02 06:39

Mash

総合スコア40

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

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

KAWASEMI

2023/05/03 06:35 編集

ご返信ありがとうございます。 ご指摘の箇所修正したところ下記のようなエラーが出てしまったのですが対処法等ありますでしょうか Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDataMapper' defined in file [**\Nsystem\sougaku\Mappars\userDataMapper.class]: Cannot resolve reference to bean 'sqlSessionTemplate' while setting bean property 'sqlSessionTemplate'
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問