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

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

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

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

Spring MVC

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

MyBatis

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

Spring Boot

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

Q&A

解決済

1回答

3520閲覧

ログインできない spring security + MyBatis

Huncho_

総合スコア6

Spring Security

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

Spring MVC

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

MyBatis

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

Spring Boot

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

0グッド

0クリップ

投稿2021/07/05 11:01

spring security + MyBatisでログイン機能を作っておりますが、ユーザー名とパスワードを入力してもエラーになり、ログイン後の画面があるのですが、そちらに遷移しません。

DBにはちゃんとテーブルもありカラムもあり、値も入ってます。

どこが悪いのかわからず、苦戦しております。

ひとつ挙げるとしたら、securityController.javaのloginUser.name()で、loginUser.getName()という書き方をしたら、怒られ、loginUser.name()にしろと言われて、 直しても変わらずです。

どなたか、わかる方いましたらご教授お願いします。

実装したクラスは以下です。

//securityController.java package com.example.demo.securityController; import org.apache.tomcat.util.net.openssl.ciphers.Authentication; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller public class SecurityController { @GetMapping("/login") //configのloginPageでloginに来るように指定したので public String login() { return "login";//自作のloginページを表示 } @GetMapping("/hello") //configのdefaultSuccessUrlでhelloに来るように指定したので public String hello(Authentication loginUser,Model model) { /*AuthenticationでログインUserの情報を使うことができるので modelを使って、"username"にusernameを詰める*/ model.addAttribute("username",loginUser.name()); return "hello";//helloを表示。usernameをhelloで表示できる } }
// securityConfig.java package com.example.demo.securityConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsService userDetailsService; @Bean //パスワードのエンコード public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } @Override //securityの設定をする protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests()//ルール、アクセスポリシーの設定 .antMatchers("/login").permitAll()//loginは認証なしでaccessできる .anyRequest().authenticated()//↑以外のすべてのURLリクエストをloginしないと見れない .and() .formLogin()//ログインの設定 .loginPage("/login") .defaultSuccessUrl("/hello", true)//ログインが成功したら/helloにいく .and() .logout()//ログアウトの設定 .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));//logoutのURLを/logoutにする } @Override //認証方法の設定を行う protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth //userDetailsServiceを使って、認証を行う .userDetailsService(userDetailsService); } }
//securityMapper.java package com.example.demo.securityMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import com.example.demo.securityUser.MyUser; @Mapper public interface UserMapper { //select文。userテーブルから、usernameが一致しているものを検索 @Select("select * from loginuser where username = #{username}") public MyUser findByUsername(String username);//識別する }
//securityUser.java package com.example.demo.securityUser; import java.util.Collection; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import lombok.Getter; import lombok.Setter; public class MyUser implements UserDetails { @Getter @Setter private String username; @Getter @Setter private String password; private Collection<GrantedAuthority> authorities; @Override public Collection<? extends GrantedAuthority> getAuthorities() { return authorities; } @Override public boolean isAccountNonExpired() { // TODO 自動生成されたメソッド・スタブ return true; } @Override public boolean isAccountNonLocked() { // TODO 自動生成されたメソッド・スタブ return true; } @Override public boolean isCredentialsNonExpired() { // TODO 自動生成されたメソッド・スタブ return true; } @Override public boolean isEnabled() { // TODO 自動生成されたメソッド・スタブ return true; } }
//SecurityUserDetails.java package com.example.demo.SecurityUserDetails; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import com.example.demo.securityMapper.UserMapper; import com.example.demo.securityUser.MyUser; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @Service public class UserDetailsServiceImpl implements UserDetailsService { @Autowired //mapperをインスタンス化。DB接続をするMapperクラスを参照 private UserMapper userMapper; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { //findByUsernameで見つけてきたユーザ情報をmyUserに入れる MyUser myUser = userMapper.findByUsername(username); //UserDetailsにreturn return myUser; } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

Authenticationが、tomcatのciphers.Authenticationになってしまっているようです。
Spring Securityで、getName()する場合は、core.Authenticationで取得できますので、以下をお試しください。

java

1//securityController.java 2import org.springframework.security.core.Authentication; 3 4//省略 5 6 @GetMapping("/hello") 7 public String hello(Authentication loginUser, Model model) { 8 model.addAttribute("username", loginUser.getName()); 9

投稿2021/07/07 09:25

KT001

総合スコア659

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

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

Huncho_

2021/07/08 11:14

importの部分直してみたら無事ログインできました! めちゃくちゃ助かりました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問