shinsunyoung / springboot-developer

📚 <스프링부트 3 백엔드 개발자 되기> 예제코드
230 stars 92 forks source link

[Chapter8] 회원 가입 기능 구현 관련 #51

Closed SummerToday closed 8 months ago

SummerToday commented 8 months ago
package me.InKyung.Blog.springbootdeveloper.config;

import lombok.RequiredArgsConstructor;
import me.InKyung.Blog.springbootdeveloper.service.UserDetailService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
import static org.springframework.boot.autoconfigure.security.servlet.PathRequest.toH2Console;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
@RequiredArgsConstructor
@Configuration
public class WebSecurityConfig {

    private final UserDetailService userService;

    // 스프링 시큐리티 비활성화
    @Bean
    public WebSecurityCustomizer configure() {
        return (web) -> web.ignoring()
                .requestMatchers(toH2Console())
                .requestMatchers("/static/**");
    }

    // 특정 HTTP 요청에 대한 웹 기반 보안 구성
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        return http
                .authorizeRequests()
                .requestMatchers("/login", "/signup", "/user").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin(formLogin -> formLogin
                        .loginPage("/login")
                        .defaultSuccessUrl("/articles")
                )
                .logout(logout -> logout
                        .logoutSuccessUrl("/login")
                        .invalidateHttpSession(true)
                )
                .csrf(AbstractHttpConfigurer::disable)
                .build();
    }
    // 인증 관리자 관련 설정
    @Bean
    public DaoAuthenticationProvider daoAuthenticationProvider() throws Exception {
        DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider();

        daoAuthenticationProvider.setUserDetailsService(userService);
        daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder());

        return daoAuthenticationProvider;
    }

    // 패스워드 인코더로 사용할 빈 등록
    @Bean
    public BCryptPasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

위와 같이 WebSecurityConfig를 수정하고 나머지 파일의 코드들은 저자님의 깃허브에 있는 코드랑 똑같이 작성하였는데 데이터베이스에 유저 정보가 들어가지 않아 회원가입 기능이 되지 않고 있습니다.. 이유가 무엇일까요?? 현재 스프링 부트 3.2.2 버전 사용중입니다. 또한 직접 데이터베이스에 회원 정보를 넣고 해봐도 로그인이 되지 않았습니다..

shinsunyoung commented 8 months ago

전체 코드 깃허브에 올려주시면 확인해보겠습니다! 코드 올리실 때에는 비밀값이 노출되지 않게 제거하고 업로드 부탁드립니다.

SummerToday commented 8 months ago

https://github.com/SummerToday/Blog_SpringProject.git 코드 올려놓았습니다. 확인 부탁드립니다! 감사합니다!

shinsunyoung commented 8 months ago

안녕하세요, 확인해보았습니다. https://github.com/SummerToday/Blog_SpringProject/blob/main/src/main/java/me/InKyung/Blog/springbootdeveloper/controller/UserApiController.java#L21 해당 코드에 path 설정이 빠져있습니다. @PostMapping("/user") 로 수정하면 잘 동작할 것으로 보입니다.

(참고: https://github.com/shinsunyoung/springboot-developer/blob/main/chapter8/src/main/java/me/shinsunyoung/springbootdeveloper/controller/UserApiController.java#L20)

SummerToday commented 8 months ago

저 부분을 놓쳤네요.. 너무 감사합니다!!