/api/member/login 404 에러 질문 드립니다.
시큐리티까지 강의를 듣고 혼자 실습 예제 만들어서 회원가입부터 진행하고 있습니다. 강의 따라서 진행할 때에는 잘 됐는데, 지금은 섹션6 시큐리티 부터 따라했는데 /api/member/login 으로 포스트맨이나 웹 브라우저로 접속하면 해당 경로를 찾을 수 없다는 404 에러가 발생하게 됐습니다. ㅠㅠ
http.formLogin(config -> config.loginPage("/api/member/login"));강의 따라 진행할 때에도 /api/member/login 컨트롤러는 별도로 없었는데, 지금 왜 갑자기 에러가 발생하는지 궁금합니다 ㅜㅜ
回答 5
0
문제 해결 됐습니다! 강의에서 말씀해주시는 것처럼 log 를 통해서 해당 인증에 접근이 성공한다면 저처럼 실습 내용과 약간 다르더라도, 인증 성공/실패 핸들러까지 구현된다면 정상적으로 모두 잘 출력됩니다 ㅎㅎ
왜 안됐는지 정확한 원인은 못 찾았습니다. 하지만 log 를 통해서 각 인증에 접근하고 출력된 결과를 통해서 정상적으로 동작된 것은 확인되고, 계속 강의 진도 나가시면 포스트맨에서 회원 정보도 정상적으로 출력됩니다!
바쁘실텐데 끝까지 해결해주기 위해서 도와주셔서 정말 감사합니다! ㅠㅠㅠ 계속 도와주셔서 정상적인 실행까지 볼 수 있었습니다. 감사합니다!
0
아.. 우선은 인증처리해주는 UserDetailsService구현체가 없어서 그렇고..
화면이 안나오는 문제는 config.loginProcessingUrl("/api/member/login") 하시고 POST 전송해 보시면 될 겁니다.
화면이 안 나오는 건 인증처리가 안되서 error메시지를 보여주기 위한 화면을 찾아서 그렇습니다.
0
다행 포스트맨에서는 Status 200 OK 으로 정상이지만 자격 증명 에러가 발생하고 있습니다. 브라우저로 들어가면 동일한 에러는 발생하고 있습니다 ㅜㅜ
org.springframework.security.authentication.BadCredentialsException: 자격 증명에 실패하였습니다.


0
음..
아래 링크에 프로젝트를 좀 올려주시거나..
깃헙 링크를 cookie_00@naver.com으로 한번 보내봐 주세요
https://drive.google.com/drive/folders/1ZLHRKaXx8Ou8kZNd1WE6qALxq_wJODXW?usp=drive_link
0
"org.springframework.web.servlet.resource.NoResourceFoundException가 발생했다고 하더라고 .. 서버 내부에서는
BadCridentialException 이 발생하지 않았나요?
org.springframework.security.authentication.BadCredentialsException: 자격 증명에 실패하였습니다.
정상적인 상황이라면 BadCredentialException이 발생해서 에러 메시지를 로그인 화면으로 가려고 해서 위의 에러가 발생할 수는 있습니다만..
0

서버 내부에서 에러 메시지는 발생되지 않는 상태입니다. 새로운 프로젝트 생성해서 해봤는데 아무래도 해당 프로젝트가 문제인 것 같기도 합니다... 새로운 프로젝트에서는 정상적으로 강의랑 동일하게 되고 있습니다. 지금 문제 발생된 해당 프로젝트에서 원인은 끝내 찾지 못했습니다 ㅜㅜ
0
api/member/login은 시큐리티에서 로그인을 처리하는 경로로 지정된 것이라..
컨트롤러를 만드는 것이 아니고.. 시큐리티가 제공하는 로그인 화면의 경로입니다.
프로젝트 실행후에 GET방식으로 'api/member/login' 호출해 보시면 기본적으로 제공하는 로그인 화면이 뜨지 않나요?
POST방식 호출 전에 반드시 CSRF 설정은 disable로 지정되어야 합니다.
0
package com.fastcampus.aptner.auth.config;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.CorsConfigurationSource;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import java.util.List;
@Log4j2
@RequiredArgsConstructor
@EnableMethodSecurity
@Configuration
public class CustomSecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
log.info("------------------ security config activate ------------------------");
// 세션 사용 금지
http.sessionManagement(httpSecuritySessionManagementConfigurer ->
httpSecuritySessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.NEVER));
// cors 설정
http.cors(httpSecurityCorsConfigurer ->
httpSecurityCorsConfigurer.configurationSource(corsConfigurationSource()));
// csrf 비활성화
http.csrf(httpSecurityCsrfConfigurer -> httpSecurityCsrfConfigurer.disable());
// 로그인 지정
http.formLogin(config -> config.loginPage("/api/member/login"));
return http.build();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowedOriginPatterns(List.of("*")); // 어디서든 허락
corsConfiguration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS"));
corsConfiguration.setAllowedHeaders(List.of("Authorization", "Cache-Control", "Content-Type"));
corsConfiguration.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfiguration);
return source;
}
}
CustomSecurityConfig 클래스 안에 답변 주신 것처럼 csrf 또 disable() 으로 설정되어 있습니다. 그리고 DB 안에 회원 정보들도 저장된 상태입니다. 제가 잘못한 부분이 있을까요..?
포스트맨, 웹 브라우저 접속 보면은 아래처럼 /api/member/login 경로를 찾을 수 없다는 404 에러 발생하고 있습니다...

동일하게 실습하는데 이상하게 페이지를 찾지 못하네요..
0
71
2
22. REST 방식 컨트롤러 만들기(2), 29. 등록처리 부분 질문이 있습니다.
0
74
2
37강. 강의수업듣다 질문드립니다.
0
55
2
TodoDTO test 함수
0
77
3
강사님 오타 있음요
0
74
2
No 1. 교제(ppt) soruce 복붙 문제 의 건
0
93
4
No 1. 교제(ppt) soruce 복붙 문제 의 건
0
66
3
17강 문의드립니다.
0
43
1
카카오 연동설정이 이제 안되는거 같아요
0
177
2
8장 마지막 강의 시 오류
0
97
4
혹시 뭐가 문제인지 알 수 있나요?
0
85
2
챕터: React-Router 설정
0
57
2
백)TODO관련
0
55
2
마리아 db 설치중 포트를 이미 사용중이라고 합니다
0
106
2
이강의 듣고 소화시켰다면 몇년차 정도 개발자라고 할수 있을까요?
0
105
1
CSR , SSR 의 수요 궁금증 질문
0
79
2
섹션5부터...
0
71
1
간단한 코드 질문!!
0
58
2
tbl_todo 질문입니다
0
63
2
수업 외 질문인데 'tbl'이 무슨 의미인가요???
0
284
2
엔티티클래스에서 질문입니다
0
76
2
수정시 writer값이 삭제되는 오류
0
39
2
교안 31 오타 수정해주세요
0
60
2
쿠키에 accessToken, refreshToken을 담고, 조회 시에 undefined
0
76
1

