지금 흐름을 살펴보자면 springsecurity를 사용하기 때문에 유저가 로그인 시도 -> security가 낚아챔 -> UserDetailsService 실행 -> loadUserByUsername() 실행하여 UserDetails 리턴
하는 상황이다.
@PostMapping("/login")
public User login(@RequestBody LoginDto loginDto) {
User user = userRepository.findByUserIdAndPwd(loginDto);
if(user == null) {
throw new UserNotFoundException(String.format("ID[%s] not found", loginDto.getUserId()));
}
return user;
}
public class WebSecurityConfig{
private final PrincipleOauth2UserService principleOauth2UserService;
private final CustomBcryptEncoder bcryptEncoder;
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf((csrf) -> csrf.disable());
http.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers("/mypage/**").authenticated()
.anyRequest().permitAll()
).formLogin(formLogin ->
formLogin.loginPage("/loginForm")
.usernameParameter("username")
.passwordParameter("password")
.loginProcessingUrl("/login")
.defaultSuccessUrl("/")
.permitAll())
.oauth2Login(oauth2Login -> oauth2Login.loginPage("/loginForm")
.userInfoEndpoint(userInfoEndpointConfig ->
userInfoEndpointConfig.userService(principleOauth2UserService))
);
return http.build();
}
}
@Service
@RequiredArgsConstructor
public class PrincipalDetailsService implements UserDetailsService {
private final UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String userId) throws UsernameNotFoundException {
User user = userRepository.findByUserId(userId);
return new PrincipalDetails(user);
}
}
formLogin.loginPage("/loginForm") .usernameParameter("username")
로 적은 usernameParameter를 userId로 바꿨어야 했다 왜 저 기본적인 걸 계속 놓치고 있었는지?...