jhhan의 블로그

Spring_Security 응용 - 로그인 페이지 만들기(3) _ DB연결 본문

Spring

Spring_Security 응용 - 로그인 페이지 만들기(3) _ DB연결

jhhan000 2020. 3. 11. 22:35

이번에는 DB연결에 대해서 알아보겠습니다.

DB연결은 MariaDB를 사용해서 진행할 예정입니다.

 

먼저 MariaDB 설치부터 하겠습니다.

참고로 MariaDB 다운로드는 

https://downloads.mariadb.org/

이 웹사이트에서 다운로드가 가능합니다. 

이 포스트를 쓰는 시점(03.11) 기준으로 10.4.12를 다운받으시면 됩니다.

 

윈도우 기준으로 64비트 버전을 다운받아서 진행하시면 됩니다.

설치를 진행하실 때 port번호와 사용자 이름, 비밀번호 설정만 잘하시면 됩니다.

설치를 다 하신후 MariaDB(바탕화면에 HeidiSQL이라는 아이콘이 생겼을 겁니다)를 더블클릭하시면 다음과 같은 화면이 나오는데

MariaDB 초기 화면

여기서 호스트명, 사용자, 암호, 포트 번호만 잘 설정하시면 됩니다.

  • 아마도 호스트명은 처음 설정하신 그대로 가시면 됩니다.
  • 사용자와 암호는 설치를 진행할 때 적었던 것을 그대로 사용합니다.
  • 포트번호 역시 아까 설정한 그대로 사용합니다.
  • 참고로 포트번호를 바꾸지 않았다면 3306을 사용하시게 될것입니다. 저는 번호를 바꿔서 3307을 사용합니다.

 

그리고 열기를 누르시면 아마 다음과 같은 화면이 나올 것입니다.

저는 test폴더 밑에 여러 테이블들이 있는데 아마 처음 실행하시는 분들은 없으실 것입니다. 나중에 천천히 만드시면 됩니다.

 

이제 Spring 프로젝트와 MariaDB를 연결하겠습니다.

먼저 pom.xml의 <dependencies>안에 다음과 같이 추가합니다.

pom.xml

그리고 application.properties에 다음과 같이 추가합니다.

  • 여기서 포트번호를 잘 입력하시고(저는 3307입니다.)
  • username과 password는 각각 아까 입력했던 사용자와 암호입니다.

이렇게 하면 DB연결이 잘 되었습니다.(아마도...)

 

이제 DB에서 데이터를 꺼내오는 법을 보겠습니다.

저번에 만들었던 SecurityConfig 클래스를 좀 바꾸겠습니다.

이런 식으로 바꿉니다.

그러면 SecurityConfig 클래스는 다음과 같이 바뀔 것입니다.

SecurityConfig의 전체적인 파일입니다. (올리는 방법을 잘 몰라서 이렇게 계속 올리겠습니다....)

configure() 메서드가 새롭게 바뀌었는데 

여기서 usersByUsernameQuery와 authoritiesByUsernameQuery를 잘 보시면 됩니다.

  • 제 생각대로 쓰는거여서 실제 작동하는 원리와 다를 수 있습니다.
  • usersByUsernameQuery에서 아이디와 비밀번호 정보를 조회해 실제 있는 회원인지 검색합니다.
  • authoritiesByUsernameQuery에서 권한을 검색해옵니다.
  • 이전 포스트에서 권한 설정을 한 부분이 있는데 그 부분에 대한 것입니다.

 

SQL문을 다뤄봤다면 아시겠지만

"select username, password, enabled from users where username=?" 와

"select username, role from authorities where username=?" 을 보시면 아시겠지만

각각 users 테이블과 authorities 테이블이 필요합니다. 이 테이블들을 mariaDB에 생성하시면 됩니다.

(제가 여기를 이해 못해서 꽤 헤맸습니다..)

users Table
authorities Table

test폴더 밑에 각각의 테이블을 만드시면 됩니다.

만약 test 폴더 밑에 안만들고 다른 부분에 만드신다면 

application.properties부분에서  spring.datasource.url=jdbc:mariadb://localhost:3307/test

이 부분을 바꾸셔야 할 것입니다.

각각의 table의 컬럼들은 본인이 원하시는 대로 더 추가하시거나 삭제하시면 됩니다.

(그리고 users 테이블과 authorities 테이블의 username은 같은 정보를 입력하셔야 합니다.)

 

password의 경우 BCryptPasswordEncoder를 사용했기 때문에 DB에도 BCrypt로 변환된 녀석을 넣으셔야 합니다.

https://www.browserling.com/tools/bcrypt

round:12

다음의 사이트에서 변환을 할 수 있고 round는 12로 설정해서 암호화된 비밀번호 값을 얻습니다.

(저는 admin 과 guest 라는 두 아이디와 모두 1234라는 간단한 비밀번호를 사용해서 진행했습니다.)

 

이제 본인이 설정하신 정보로 로그인을 진행하시면 로그인이 진행됩니다.

(여기는 제가 캡쳐 사진을 못 찍어서.. 다른 대체 화면을 올리겠습니다.)

  • 이 화면은 제가 로그인 화면을 따로 만들어서 조금 못생겼습니다. 그래도 로그인은 잘 됩니다.
  • 본인이 설정하신 아이디와 비밀번호로 로그인을 하시면 

  • 다음과 같이 로그인을 하실 수 있습니다. 
  • 로그인 이후의 화면은 바꾸지 않았으니 원래와 같이 나올 것입니다.
  • '게시판'은 무시하시면 됩니다.

 

이렇게 MariaDB를 연결한 뒤 DB의 데이터를 통해 로그인을 진행했습니다.

조금 쓸데없는 설명도 있었는데 제가 느낀 것을 그대로 적었습니다.

 

일단 당분간은 여기서 더 진행하지 않을 거 같은데 

다음에 올린다면 게시판 부분이나 회원가입 부분에 대해서 올리겠습니다.

 

 

 

 

참고한 페이지

http://yoonbumtae.com/?p=1202