본문 바로가기
스프링

스프링 시큐리티를 이용한 회원가입과 로그인 1

by 근즈리얼 2021. 10. 1.
728x90

책과 인터넷 강의를 통해 회원가입과 로그인에 대해서 배웠습니다.

배운 내용을 바탕으로 회원가입과 로그인을 만들어보려고 합니다.

 

환경은

mysql, springSecurity, gradle, .yml로 진행합니다.

plugins {
    id 'org.springframework.boot' version '2.5.5'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.asdAnything'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
}

test {
    useJUnitPlatform()
}

프로젝트를 생성할 때 준비한 의존관계입니다.

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mac?serverTimezone=UTC
    username: root
    password: 1234

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      format_sql: true


logging:
  level:
    org.hibernate.SQL: debug

.yml 파일입니다. mysql에 연동하였습니다.

 

주소창에 localhost:8080을 입력하면

이런 화면이 뜨는 것을 확인할 수 있습니다.

이 화면은 스프링 시큐리티에서 제공하는 뷰입니다.

 

스프링에서 비밀번호를 제공하고 

아이디는 user를 치면 로그인 화면이 넘아가는 것을 알수 있습니다.

 

이번에는 이 화면을 나오지 않게 해보겠습니다.

config라는 디렉토리를 만들고 SecurityConfig라는 클래스를 만듭니다.

package com.asdanything.ask.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //super.configure(http);
    }
    
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

클래스를 만들고 WebSecurityConfigureAdapter를 상속받고 @EnableWebSecurity 애노테이션을 붙여줍니다.

 

이렇게 하면 SpringSecurityFilterChain이 자동으로 포함되게 됩니다.

 

밑에 @Bean으로 등록한 메소드는 비밀번호를 암호화 시켜주는 메소드입니다.

user의 비밀번호를 그대로 데이터베이스에 저장하게 되면 문제가 생길 수 있기 때문에 암호화가 필요합니다.

 

이제 configure메소드에 대해서 살펴보겠습니다.

이 메소드 안에서 페이지 권한, 로그인 페이지 설정, 로그아웃 메소드 등에 대해서 설정할 수 있습니다.

제가 주석처리한 super.configure(http)는 메소드를 오버라이딩하면 처음부터 있는 부분입니다.

저 부분때문에 localhost를 입력했을 때 스프링시큐리티에서 제공하는 로그인 페이지에 연결되었습니다.

 

다시한번 실행시켜 보겠습니다.

사진처럼 로그인페이지 없이 바로 whitelabel 페이지가 뜨게 됩니다.

 

728x90

댓글