개발환경

build.gradle

plugins {
	id 'org.springframework.boot' version '2.3.0.RELEASE'
	id 'io.spring.dependency-management' version '1.0.9.RELEASE'
	id 'java'
	id 'com.palantir.docker' version '0.22.1'
	id "com.moowork.node" version "1.3.1"
}

bootRun {
    String activeProfile = System.properties['spring.profiles.active']
    systemProperty "spring.profiles.active", activeProfile
}

group = 'com.payhada'
version = '2.0.0'
sourceCompatibility = '1.8'

...

dependencies {
	...

	// Database + jdbc
	implementation "org.springframework.boot:spring-boot-starter-jdbc"
	compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.28'
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'

	// Log
	implementation group: 'org.bgee.log4jdbc-log4j2', name: 'log4jdbc-log4j2-jdbc4.1', version: '1.16'
	implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.9.1'
	implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.12.4'

	// Spring Security
	implementation 'org.springframework.boot:spring-boot-starter-security'
	implementation 'org.springframework.boot:spring-boot-starter-security:2.3.12.RELEASE'
	testImplementation 'org.springframework.security:spring-security-test'

	// Others
	compile group: 'com.google.code.gson', name: 'gson', version: '2.8.9'
	compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.5.14', ext: 'pom'
	implementation 'org.json:json:20220320'

	runtime('net.logstash.logback:logstash-logback-encoder:5.1')

	// lombok
	annotationProcessor("org.projectlombok:lombok")
	compileOnly("org.projectlombok:lombok")
	compile group: 'org.projectlombok', name: 'lombok', version: '1.18.4'
	compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.3.4.RELEASE'
	annotationProcessor 'org.projectlombok:lombok:1.18.4'

	...
}

...

동작 순서

*AbstractAuthenticationProcessingFilter* Spring Security의 필터가 attemptAuthentication() 메서드를 실행 → 사용자가 구현한 JsonUsernamePasswordAuthenticateionFilter.attemptAuthentication() 실행

JsonUsernamePasswordAuthenticateionFilter 로그인 시 입력받은 ID / PASSWORD / OTP 를 통해 AuthenticationToken을 생성 하여 AuthenticationManager 의 authenticate() 메서드 호출