본문 바로가기
DEV/JAVA

스프링부트 코딩공작소 - 3장

by 땅콩둘기 2021. 6. 3.
반응형

스프링부트 코딩공작소 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

 

java - 유형 매개 변수 'S'에 대해 유추 된 유형 'S'가 범위 내에 없습니다

이 저장소를 만들었습니다. @Repository public interface OrganisationRepository extends JpaRepository { } 하지만 내가 그것을 사용할 때 : organisationRepository.findOne(1L); 이 오류가 있습니다. Inferred type 'S' for type paramet

www.python2.net

https://thecodinglog.github.io/spring/security/2018/07/31/spring-security-service-1.html

 

Spring Security로 Security 서비스 구축하기 1

Spring Security로 인증 스프링 시큐리티 스프링시큐리티 authentication

thecodinglog.github.io

위 블로그들을 참고하여 아래처럼 코드를 수정했습니다.

그 후에 다시 실행을 한 후 로그인을 시도해보니 아래 그림과 같이

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

 

Spring Boot 에서 Log4j2 를 설정하는 방법

로그를 남기는 방법? 우리가 왜 Application에 log를 남기는 것이 중요한지 에 대해서는 지난시간에 살펴보았죠 ㅎㅎ 기억이 안나신다면 이전 포스팅을 참고해주세요 :) huisam.tistory.com/entry/springlogging

huisam.tistory.com

 

반응형

댓글