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

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

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

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

Java

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

Spring Boot

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

受付中

spring security DB認証ができません

aaa11
aaa11

総合スコア14

Spring Security

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

Java

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

Spring Boot

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

1回答

0評価

0クリップ

3409閲覧

投稿2021/03/17 02:27

下記のエラーコードが原因で認証ができないと思います。
色々と変更を加えたり試しましたが認証できないので投稿しました。
アドバイスしていただけないでしょうか。

java

//エラーコード 2021-03-17 11:18:28.505 ERROR 20683 --- [nio-8080-exec-3] w.a.UsernamePasswordAuthenticationFilter : An internal error occurred while trying to authenticate the user. org.springframework.security.authentication.InternalAuthenticationServiceException: UserDetailsService returned null, which is an interface contract violation at org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser(DaoAuthenticationProvider.java:95) ~[spring-security-core-5.4.5.jar:5.4.5]

java

//WebSecurityConfig.java @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); //パスワードのハッシュ化でBCryptを使う } @Override public void configure(WebSecurity web) throws Exception { // セキュリティ設定を無視するリクエスト設定 // 静的リソースに対するアクセスはセキュリティ設定を無視する web.ignoring().antMatchers("/css/**"); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() // 認証が必要となるURLを設定 .antMatchers("/login/**").permitAll() // /loginは認証不要 .anyRequest().authenticated(); // それ以外はすべて認証 http.formLogin() .loginPage("/login") // ログインフォームのパス .loginProcessingUrl("/login") // 認証処理を起動させるパス .usernameParameter("userId") .passwordParameter("password"); // ユーザ名とパスワード http.logout() // ログアウト処理を起動させるパス .logoutRequestMatcher(new AntPathRequestMatcher("/logout**")) .logoutSuccessUrl("/login"); // ログアウト完了時のパス } @Configuration protected static class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter { @Autowired UserDetailsServiceImpl userDetailsService; @Override public void init(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService) .passwordEncoder(new BCryptPasswordEncoder()); } } }

java

//LoginController.java @Controller public class LoginController { @RequestMapping("/login") public String login(Model model) { model.addAttribute("title","ログイン画面"); return "login"; } @PostMapping("/login") public String user() { return "user"; } }

java

//LoginUser.java @Entity @Table(name = "loginuser") @Data public class LoginUser implements UserDetails { @Id @Column(name = "user_Id") private String userId; @Column(name = "name") private String name; @Column(name = "password") private String password; @Override public Collection<? extends GrantedAuthority> getAuthorities() { return null; } @Override public String getUsername() { return this.userId; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } }

java

//LoginRepository.java public interface LoginRepository extends JpaRepository<LoginUser, String> { LoginUser findByUserId(String userId); }

java

//UserDetailsServiceImpl.java @Service public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private LoginRepository repository; @Override public UserDetails loadUserByUsername(String userId) throws UsernameNotFoundException { LoginUser user = repository.findByUserId(userId); return user; }

html

//login.html <!DOCTYPE html> <html xmlns:th ="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title th:text ="${title}"></title> </head> <body> <h1 th:text="${title}"></h1> <form method = "post" action = "#" th:action="@{/login}"> <label for="userId">ユーザーID:</label> <input id="userId" name="userId" type="text"><br> <label for="password">パスワード:</label> <input id="password" name="password" type="text"><br> <input type="submit" value="ログイン"> </form> </body> </html>

html

//user.html <!DOCTYPE html> <html xmlns:th ="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>ユーザー画面</title> </head> <body> <h1>ユーザー画面</h1> </body> </html>

DBTable

CREATE TABLE company_db.loginuser ( user_Id VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, name VARCHAR(20) NOT NULL, CONSTRAINT PRIMARY KEY (user_Id) ); //インサートするパスワードは1111をハッシュ化した値 INSERT INTO company_db.loginuser (`user_Id`,`password`,`name`)VALUES('1111','$2a$10$EKa6c8meutUMkLiF6e.so.7ky/d71a8zBnWJM122M..LYkMszx7jK','山田太郎');

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

K_3578

2021/03/17 02:36

まず、エラー文は読まれたのでしょうか。
aaa11

2021/03/17 02:48

はい、読んでます。
K_3578

2021/03/17 02:57

質問文に書かれていなければ質問者さんが読まれて、 意味を理解していたとしても理解した上でどのようにエラーを解消しようとしたかはわかりかねます。 エラーを解消するのにご自分でどういう事をしたかを追記してください。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Spring Security

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

Java

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

Spring Boot

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