Gradle Test Executor 1
해결방법
Ctrl + Alt + s (환경설정) -> Build, Exception, Deployment -> Gradle -> Gradle Project 탭 Build and run using 과 Run tests using을 모두 IntelliJ IDEA 로 변경
import static org.hamcrest.MatcherAssert.assertThat;
해결방법
그냥 하드코딩 ㅠㅡㅠ (손으로 칩시다...)
비주류?.. 안되는 애들은 어쩔 수 없다...
자주 써야할 것 같으면 단축키를 활용해 야매로 할 수 있긴 함...
@allargument
를 붙인 뒤로 post가 정상적으로 수행되지 않았다.
알고보니 위와 같이 Spring이 자동으로 구성해준 MapperImpl
클래스가 @allargument
를 붙이기 전에 빌드되어 기본생성자가 있다고 생각하고 코드가 짜져있다.
따라서 @allargument
를 추가해 줌으로써 기본생성자가 자동으로 생성되지 않기 떄문에 위와 같은 오류가 발생했던 것이다.
Execution failed for task ':test'.
> Process 'Gradle Test Executor 84' finished with non-zero exit value 1
대부분의 Gradle오류는 아래와 같이 인텔리제이를 사용한 빌드방식으로 설정해주면 해결 됐다. 하지만 이번에는 안됐다.
윈도우 계정명이 한글로 되어있어서 발생했던 문제 같다.
새로운 user를 영문명으로 만들어 해결했다.
java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null”
오류
패스워드를 암호화하지 않고 User를 등록 하면 발생하는 오류
코드 간단 설명
- 검증에 실패할 경우
AuthenticationException
을 throw- 이
AuthenticationException
이 throw 되면SecurityConfiguration
에서 설정한.failureUrl("/auths/login-form?error")
을 통해 로그인 폼으로 리다이렉트 하면서 인증 실패 메시지를 표시하도록 설정해 뒀음
그런데 회원 가입을 하지 않고 로그인을 시도할 경우
에 아래와 같은 오류가 발생했다.
원인 : DBMemberService
클래스의 verifyExistsEmail()
메서드에서 등록된 회원 정보가 없으면, BusinessLogicException을 throw 하는데 이 BusinessLogicException
이 Cusotm AuthenticationProvider
를 거쳐 그대로 Spring Security 내부 영역으로 throw 되기 때문이였다.
Spring Security에서는 인증 실패 시, AuthenticationException이 throw 되지 않으면 다른 종류의 Exception에 대한 별도의 처리를 하지 않고, 서블릿 컨테이너인 톰캣 쪽으로 이 처리를 넘긴다.
설정이 빠졌을 때 발생하는 오류다.
2023-03-23 01:02:00.266 ERROR 23520 --- [main] o.s.b.d.LoggingFailureAnalysisReporter :
***************************
APPLICATION FAILED TO START
***************************
Description:
Method filterChain in com.codestates.hello_oauth2.config.SecurityConfiguration required a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' that could not be found.
Action:
Consider defining a bean of type 'org.springframework.security.oauth2.client.registration.ClientRegistrationRepository' in your configuration.
// // ClientRegistrationRepository라는 Bean이 없으니 SecurityConfiguration에 추가해라
OAuth2 인증과정에서 클라이언트 ID와 클라이언트 보안 비밀번호(Secret)를 설정하지 않았기 때문에 발생한 에러다.
처음에는 환경변수에 null값이 들어가는 등 인식이 제대로 안되는 것 같았다.
jwt:
key: ${JWT_SECRET_KEY} # 민감한 정보는 시스템 환경 변수에서 로드한다.
#key: "#{systemEnvironment['JWT_SECRET_KEY']}" # 시스템 환경 변수에서 로드하는 방법(JWT_SECRET_KEY라는 이름의 환경변수를 가져오는 것)
access-token-expiration-minutes: 30
refresh-token-expiration-minutes: 420
위와 같은 방법으로 추가해도 되긴 하는데... 시스템 환경변수 추가 후 인텔리제이 재부팅을 안해서 인식이 안됐던 것 같다.
// 추가로 발생했던 오류문
io.jsonwebtoken.security.WeakKeyException: The specified key byte array is 232 bits which is not secure enough for any JWT HMAC-SHA algorithm.
The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used with HMAC-SHA algorithms MUST have a size >= 256 bits (the key size must be greater than or equal to the hash output size).
Consider using the io.jsonwebtoken.security.Keys#secretKeyFor(SignatureAlgorithm) method to create a key guaranteed to be secure enough for your preferred HMAC-SHA algorithm.
See https://tools.ietf.org/html/rfc7518#section-3.2 for more information.
환경 변수 인식 후에도 위와 같은 오류가 발생했다.
이 오류는 JWT(JSON Web Token)를 생성하는데 사용되는 Secret Key의 길이가 너무 짧아서 발생하는 오류다.
보안을 위해서 JWT JWA Specification (RFC 7518, Section 3.2)에서는 HMAC-SHA 알고리즘에 사용되는 Secret Key의 길이는 256 비트 이상이어야 한다고 규정하고 있다.
즉, 내가 환경변수 시크릿 키 길이를 너무 짧게 설정한 것이다.
cmd나 파워쉘에서 mysql 명령어를 사용하면 인식이 안됐다.
찾아보니까 환경변수 설정하라고 해서 봤더니 msql server8.0이 (옛날에 저도 모르게 지웠는지) 저한테는 없어서 재설치를 하게 되었는데
재설치 과정에서 계속 root 비밀번호를 입력하라고 나온다...
(비밀번호 분명 적어뒀고 맞는데 자꾸 틀리다고 나와서 설치 마무리가 안되는 상태ㅠ.ㅠ)
검색해서 찾은 비밀번호 재설정 방법(--skip-grant하고 비번 재설정)을 시도해도 설치가 완료되지 않은 상태라 그런건지... 계속 제대로 동작을 안한다.
완전히 삭제를 해야하는데 일부 데이터가 남아있어서 재설치 과정에서 root비밀번호를 다시 묻는 것이였다.
윈도우 mysql 삭제 과정을 따라하는데 솔직히 2번 레파지토리는 굳이 안지워도 될 것 같고...
3번이 문제였다.
실행중이라고 뜨긴하는데 작업관리자를 보고...재부팅해도 안지워진다.
폴더 강제 삭제 방법을 따라 리소스 모니터로 프로세스 종료하니까 삭제가 됐다.
다시 처음부터 mysql 설치하니까 드디어 해결!!...
비번 설정도 다시할 수 있고...이것저것 잘못만져서 사라지거나 추가된 파일들도 복귀된건지 명령어도 잘먹고 제대로 작동한다!
System has not been booted with systemd as init system (PID 1). Can't operate.
위 오류문은 Docker가 실행 안된거다.
Docker Desktop을 키고 Docker 명령어를 사용하면 된다.