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

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

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

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

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Java

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

Spring

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

Q&A

解決済

1回答

2049閲覧

Spring Securityを使用したログイン機能の実装

ransuS_T

総合スコア106

Spring Security

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

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Java

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

Spring

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

0グッド

0クリップ

投稿2021/01/04 13:48

あらかじめMongoDBに登録されたアカウントを参照し
ログイン認証を行おうとしておりますが
リクエストの結果コードに302(リダイレクト)が返ってきてしまいます。

実際に画面からリクエストを投げてDBからデータが取れてきているところまでは
デバッグを通して確認しております。
なので実際にSpring Securityの認証部分で記述が何か足りずに
このような問題が発生していると考えております。

以下ソースコードになります。

SecurityConfig部分

java

1package com.ransu.lastperiodweb.webconfig; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.context.annotation.Bean; 5import org.springframework.context.annotation.Configuration; 6import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 7import org.springframework.security.config.annotation.web.builders.HttpSecurity; 8import org.springframework.security.config.annotation.web.builders.WebSecurity; 9import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; 10import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 11import org.springframework.security.crypto.password.NoOpPasswordEncoder; 12import org.springframework.security.crypto.password.PasswordEncoder; 13import org.springframework.security.web.csrf.CookieCsrfTokenRepository; 14 15import com.ransu.lastperiodcommon.service.imp.LoginServiceImp; 16 17 18@Configuration 19@EnableWebSecurity 20public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 21 22 @Autowired 23 LoginServiceImp loginService; 24 25 @Override 26 public void configure(WebSecurity web) throws Exception { 27 web.ignoring().antMatchers("/css/**", "/js/**", "/webjars/**"); 28 } 29 30 @Override 31 protected void configure(HttpSecurity http) throws Exception { 32 33 http.authorizeRequests() 34 // ログインとアカウント作成ページを認証不要に 35 .antMatchers("/loginPage").permitAll() 36 .antMatchers("/createAccountPage").permitAll() 37 .antMatchers("/createAccount").permitAll() 38 39 // ユニットの一覧検索ページを認証不要に 40 .antMatchers("/mainPage").permitAll() 41 .antMatchers("/unitListPage").permitAll() 42 .antMatchers("/getUnitDataList").permitAll() 43 44 // その他はログインが必要 45 .anyRequest().authenticated() 46 47 .and() 48 // トークンをcookieで持つように設定 49 .csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) 50 51 .and() 52 .formLogin() 53 // ログイン処理をするURL 54 .loginProcessingUrl("/login") 55 // ログイン画面のURL 56 .loginPage("/loginPage") 57 .usernameParameter("mail") 58 .passwordParameter("password") 59 .successForwardUrl("/mainPage") 60 .failureUrl("/login?error"); 61 } 62 63 @Bean 64 public PasswordEncoder passwordEncoder() { 65 return NoOpPasswordEncoder.getInstance(); 66 } 67 68 @Autowired 69 public void configure(AuthenticationManagerBuilder auth) throws Exception{ 70 auth.userDetailsService(loginService) 71 .passwordEncoder(passwordEncoder()); 72 } 73} 74

認証データの入れ物クラス

java

1package com.ransu.lastperiodcommon.entity; 2 3import java.util.Collection; 4import java.util.Date; 5 6import org.bson.types.ObjectId; 7import org.springframework.data.annotation.Id; 8import org.springframework.data.mongodb.core.mapping.Document; 9import org.springframework.security.core.GrantedAuthority; 10import org.springframework.security.core.userdetails.UserDetails; 11 12import lombok.Data; 13 14@Data 15@Document(collection = "account") 16public class AccountEntity implements UserDetails { 17 18 @Id 19 private ObjectId id; 20 21 private String mail; 22 23 private String password; 24 25 private Date createDate; 26 27 private Date updateDate; 28 29 private boolean enabled; 30 31 @Override 32 public Collection<? extends GrantedAuthority> getAuthorities() { 33 return null; 34 } 35 36 @Override 37 public String getUsername() { 38 return this.mail; 39 } 40 41 @Override 42 public boolean isAccountNonExpired() { 43 return true; 44 } 45 46 @Override 47 public boolean isAccountNonLocked() { 48 return true; 49 } 50 51 @Override 52 public boolean isCredentialsNonExpired() { 53 return true; 54 } 55 56 @Override 57 public boolean isEnabled() { 58 return this.enabled; 59 } 60} 61

MongoRepository

java

1package com.ransu.lastperiodcommon.repository; 2 3import org.springframework.data.mongodb.repository.MongoRepository; 4 5import com.ransu.lastperiodcommon.entity.AccountEntity; 6 7public interface AccountRepository extends MongoRepository<AccountEntity, String> { 8 9 AccountEntity findByMail(String mail); 10}

ログイン処理時に走る認証データ取得処理

java

1package com.ransu.lastperiodcommon.service.imp; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.security.core.userdetails.UserDetails; 5import org.springframework.security.core.userdetails.UserDetailsService; 6import org.springframework.security.core.userdetails.UsernameNotFoundException; 7import org.springframework.stereotype.Service; 8 9import com.ransu.lastperiodcommon.entity.AccountEntity; 10import com.ransu.lastperiodcommon.repository.AccountRepository; 11 12@Service 13public class LoginServiceImp implements UserDetailsService { 14 15 @Autowired 16 private AccountRepository repository; 17 18 @Override 19 public UserDetails loadUserByUsername(String mail) throws UsernameNotFoundException { 20 AccountEntity account = repository.findByMail(mail); 21 return account; 22 } 23} 24

こちら原因を探る際に足りない部分等ございましたらご指摘をお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

認証データの入れ物クラス

申し訳ありません。
こちらにDB側で設定していないenabled項目を参照する記述があり
ここをtrue固定にしたら解決いたしました。

投稿2021/01/06 05:24

ransuS_T

総合スコア106

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問