비밀번호 처리에 프레임워크 도움 받기

회원가입 시 비밀번호를 hash해 주는 영역

fun signUp(request: UserSignUpRequest) {
        if (userRepository.existsByAccountId(request.accountId)) {
            throw IllegalArgumentException("아이디가 존재합니다.")
        }

        userRepository.save(
            UserEntity(
                accountId = request.accountId,
                password = passwordEncoder.encode(request.password),
            )
        )
    }

password를 저장할 때 passwordEncoder의 encode 메소드를 사용해서 암호화합니다.

로그인 시 비밀번호의 hash끼리 비교해 주는 영역

fun signIn(request: UserSignInRequest): TokenResponse {
        val user = userRepository.findByAccountId(request.accountId)
            ?: throw UnAuthorizedException

        if (passwordEncoder.matches(request.password, user.password)) {
            throw UnAuthorizedException
        }

        return jwtProvider.getToken(request.accountId)
    }

password를 비교할 때 passwordEncoder의 matches 메소드를 사용해서 비교합니다.

boolean matches(CharSequence rawPassword, String encodedPassword);
// 내부는 이렇게 되어 있어서 첫 번째 인자로 요청 값을 넣고 두 번째 인자로 암호화 되어있는걸 넣었습니다.

인증 처리에 프레임워크 도움 받기

특정 path에 대해서 JWT 인증 요구하기

@Bean
    @Throws(Exception::class)
    fun securityFilterChain(http: HttpSecurity): SecurityFilterChain? {
        http
            .formLogin { it.disable() }
            .csrf { it.disable() }
            .cors {}
            .authorizeHttpRequests {
                it.requestMatchers("/todos/**").authenticated() // /todos로 시작하는 모든 path 인증 요구
                it.requestMatchers("/users/**").authenticated() // /users로 시작하는 모든 path 인증 요구
                    .anyRequest().permitAll()
            }
        http
            .apply(FilterConfig(jwtParser, objectMapper))
        return http.build()
    }

스크린샷 2023-08-04 오후 2.05.19.png

토큰을 넣지 않았기 때문에 403이 뜨는걸 확인할 수 있다.

토큰 넣고 요청

스크린샷 2023-08-04 오후 3.38.57.png

200이 뜨는것을 볼 수 있다.