inflearn logo
강의

講義

知識共有

コードで学ぶReact 19 with Spring Boot APIサーバー

DTO와 인증 서비스

/api/member/login 404 에러 질문 드립니다.

解決済みの質問

634

optional94

投稿した質問数 20

0

시큐리티까지 강의를 듣고 혼자 실습 예제 만들어서 회원가입부터 진행하고 있습니다. 강의 따라서 진행할 때에는 잘 됐는데, 지금은 섹션6 시큐리티 부터 따라했는데 /api/member/login 으로 포스트맨이나 웹 브라우저로 접속하면 해당 경로를 찾을 수 없다는 404 에러가 발생하게 됐습니다. ㅠㅠ

 http.formLogin(config -> config.loginPage("/api/member/login"));

강의 따라 진행할 때에도 /api/member/login 컨트롤러는 별도로 없었는데, 지금 왜 갑자기 에러가 발생하는지 궁금합니다 ㅜㅜ

react spring-boot jpa jwt redux-toolkit

回答 5

0

optional94

문제 해결 됐습니다! 강의에서 말씀해주시는 것처럼 log 를 통해서 해당 인증에 접근이 성공한다면 저처럼 실습 내용과 약간 다르더라도, 인증 성공/실패 핸들러까지 구현된다면 정상적으로 모두 잘 출력됩니다 ㅎㅎ
왜 안됐는지 정확한 원인은 못 찾았습니다. 하지만 log 를 통해서 각 인증에 접근하고 출력된 결과를 통해서 정상적으로 동작된 것은 확인되고, 계속 강의 진도 나가시면 포스트맨에서 회원 정보도 정상적으로 출력됩니다!

바쁘실텐데 끝까지 해결해주기 위해서 도와주셔서 정말 감사합니다! ㅠㅠㅠ 계속 도와주셔서 정상적인 실행까지 볼 수 있었습니다. 감사합니다!

0

zk202308a5410

아.. 우선은 인증처리해주는 UserDetailsService구현체가 없어서 그렇고..

 

화면이 안나오는 문제는 config.loginProcessingUrl("/api/member/login") 하시고 POST 전송해 보시면 될 겁니다.

 

 

 

화면이 안 나오는 건 인증처리가 안되서 error메시지를 보여주기 위한 화면을 찾아서 그렇습니다.

 

 

0

optional94

다행 포스트맨에서는 Status 200 OK 으로 정상이지만 자격 증명 에러가 발생하고 있습니다. 브라우저로 들어가면 동일한 에러는 발생하고 있습니다 ㅜㅜ

 

org.springframework.security.authentication.BadCredentialsException: 자격 증명에 실패하였습니다.

imageimageimage

0

zk202308a5410

음..

아래 링크에 프로젝트를 좀 올려주시거나..

깃헙 링크를 cookie_00@naver.com으로 한번 보내봐 주세요

 

https://drive.google.com/drive/folders/1ZLHRKaXx8Ou8kZNd1WE6qALxq_wJODXW?usp=drive_link

 

 

0

optional94

구글 드라이브로 올려드렸습니다. 감사합니다! ㅠㅠ

0

zk202308a5410

"org.springframework.web.servlet.resource.NoResourceFoundException

가 발생했다고 하더라고 .. 서버 내부에서는

 

BadCridentialException 이 발생하지 않았나요?

 

 

org.springframework.security.authentication.BadCredentialsException: 자격 증명에 실패하였습니다.

 

 

정상적인 상황이라면 BadCredentialException이 발생해서 에러 메시지를 로그인 화면으로 가려고 해서 위의 에러가 발생할 수는 있습니다만..

 

 

0

optional94

image
서버 내부에서 에러 메시지는 발생되지 않는 상태입니다. 새로운 프로젝트 생성해서 해봤는데 아무래도 해당 프로젝트가 문제인 것 같기도 합니다... 새로운 프로젝트에서는 정상적으로 강의랑 동일하게 되고 있습니다. 지금 문제 발생된 해당 프로젝트에서 원인은 끝내 찾지 못했습니다 ㅜㅜ

0

zk202308a5410

api/member/login은 시큐리티에서 로그인을 처리하는 경로로 지정된 것이라..

컨트롤러를 만드는 것이 아니고.. 시큐리티가 제공하는 로그인 화면의 경로입니다.

프로젝트 실행후에 GET방식으로 'api/member/login' 호출해 보시면 기본적으로 제공하는 로그인 화면이 뜨지 않나요?

 

POST방식 호출 전에 반드시 CSRF 설정은 disable로 지정되어야 합니다.

 

 

 

0

optional94

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 에러 발생하고 있습니다...


imageimage

동일하게 실습하는데 이상하게 페이지를 찾지 못하네요..

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