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 메소드를 사용해서 암호화합니다.
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);
// 내부는 이렇게 되어 있어서 첫 번째 인자로 요청 값을 넣고 두 번째 인자로 암호화 되어있는걸 넣었습니다.
@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()
}
토큰을 넣지 않았기 때문에 403이 뜨는걸 확인할 수 있다.
200이 뜨는것을 볼 수 있다.