스프링부트 코딩공작소 3장을 보고 따라하다가 오류난 내용을 정리한 포스팅입니다.
3.1.1 애플리케이션 보안 설정하기
책에는 compile을 사용하고 있지만 Gradle 7.0에서는 compile과 runtime이 사라지고 implementation과 api 로 사용할수 있다고 합니다.
추가해주고 grdle build를 해주면 아래처럼 라이브러리에 security가 추가된 것을 확인할 수 있습니다.
추가한 후 실행해서 확인해보면 기본화면을 볼 수 있습니다.
패스워드는 자동으로 생성되어 애플리케이션을 시작할 때 로그로 출력됩니다.
* LDAP 기반 사용자 저장소를 이용?
- Lightweight Directory Access Protocol
- 네트워크 상에서 조직이나 개인정보 혹은 파일이나 디바이스 정보 등을 찾아보는 것을 가능하게 만든 소프트웨어 프로토콜
출처: https://yongho1037.tistory.com/796 [개발 노트]
3.1.2 사용자 정의 보안 구성하기
SecurityConfig 클래스에서 아래 사진과 같이 오류가 났습니다.
버전문제로 확인되어서 찾아보니 findOne의 자료형이 변경되었다고 합니다.
https://www.python2.net/questions-1109148.htm
https://thecodinglog.github.io/spring/security/2018/07/31/spring-security-service-1.html
위 블로그들을 참고하여 아래처럼 코드를 수정했습니다.
그 후에 다시 실행을 한 후 로그인을 시도해보니 아래 그림과 같이
There is no PasswordEncoder mapped for the id "null" 오류가 발생했습니다.
Spring Security 버전 5 이상부터는 PasswordEncoder가 변경되었기 때문에 password 앞에 식별자 정보를 넣어야 하는데 식별자 정보를 넣지 않아 위와 같은 에러가 발생했습니다.
password 형식을 "{noop}패스워드"와 같은 형식으로 생성해주면 위 문제는 해결이 됩니다.
출처: https://jaimemin.tistory.com/1526 [꾸준함]
그래서 data.sql 수정했습니다. data.sql 수정후에는 정상적으로 로그인이 되었습니다.
insert into Reader (username, password, fullname) values ('craig', '{noop}password', 'Craig Walls');
3.2 프로퍼티를 이용하여 외부적으로 구성하기
스프링 부트 아스키아트 배너를 삭제하는 방법으로 책에서
application.properties에
spring.main.show-banner = false로 적혀있으나
버전변경으로
spring.main.banner-mode=off
처럼 적어야 정상적으로 적용됩니다. 인텔리제이에서는 알아서 추천해주더라구요:)
3.2.1 자동 구성 미세하게 조정하기
로깅 구성에서 스프링의 기본 로깅인 로그백을 log4j로 변경하는 방법을 소개하고 있습니다.
이것도 책을 따라서 하면 compile와 log4j을 사용할 수 없어 오류가 나게 됩니다.
compile을 implementation으로 log4j를 log4j2로 변경해주면 해결할 수 있습니다.
참고 : https://huisam.tistory.com/entry/log4j2
'DEV > JAVA' 카테고리의 다른 글
프로그래머스_LV1_달리기 경주(풀이 및 시간초과 해결하기) (0) | 2023.09.11 |
---|---|
H2 database GenerationType.IDENTITY 오류 (0) | 2022.06.21 |
스프링부트 사용하기 (0) | 2021.06.03 |
스프링부트 CLI 시작하기 (0) | 2021.05.19 |
JAVA로 하샤드 수 구현하기 (0) | 2021.05.01 |
댓글