あらかじめ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
こちら原因を探る際に足りない部分等ございましたらご指摘をお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。