로그인
이전 페이지
이전 페이지 내용에 이어서 진행합니다.
Code
Preview
1.
메인 화면
2.
로그인 화면
작업 프로세스
1.
프로젝트 생성
2.
스프링 시큐리티 설정
3.
요청 경로 매핑
Preview
1.
메인 화면
2.
로그인 화면
3.
메인 화면 (로그인 완료)
메인 화면
로그인 화면
메인 화면 (로그인 완료)
작업 프로세스
1.
프로젝트 생성
•
build.gradle•
spring boot version : 2.x.x
•
spring security version : 5.x.x
•
의존성 설정
◦
Spring Web
◦
Spring Boot DevTools
◦
Spring Security
◦
Lombok
◦
Thymeleaf
◦
MySQL Driver
◦
Mybatis Framework
2.
스프링 시큐리티 설정
•
~/config/SecurityConfig.java프로젝트 생성
build.gradle
spring boot 2.x.x
spring security 5.x.xplugins {
id 'java'
id 'war'
id 'org.springframework.boot' version '2.7.17'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}
group = 'com.aloha'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
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.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.1'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:2.3.1'
testImplementation 'org.springframework.security:spring-security-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
Java
복사
스프링 시큐리티 설정
~/config/SecurityConfig.java
UserDetailsService 빈 등록
UserDetailsService 빈을 등록하여, 사용자 정보를 불러올 수 있는 SQL 쿼리를 설정해주어 인증 처리를 구현한다.
•
사용자 인증 쿼리•
사용자 권한 쿼리@Bean
public UserDetailsService userDetailsService() {
JdbcUserDetailsManager userDetailsManager
= new JdbcUserDetailsManager(dataSource);
// 사용자 인증 쿼리
String sql1 = " SELECT username, password, enabled "
+ " FROM user "
+ " WHERE username = ? "
;
// 사용자 권한 쿼리
String sql2 = " SELECT username, auth "
+ " FROM user_auth "
+ " WHERE username = ? "
;
userDetailsManager.setUsersByUsernameQuery(sql1);
userDetailsManager.setAuthoritiesByUsernameQuery(sql2);
return userDetailsManager;
}
Java
복사
SecurityConfig.java
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Autowired
private DataSource dataSource;
// 스프링 시큐리티 설정 메소드
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// ✅ 인가 설정
http.authorizeRequests(requests -> requests
.antMatchers("/**").permitAll()
.anyRequest().permitAll()
);
// 🔐 폼 로그인 설정
http.formLogin(withDefaults());
return http.build();
}
/**
* 👮♂️🔐 사용자 인증 관리 빈 등록 메소드
* JDBC 인증 방식
* ✅ 데이터 소스 (URL, ID, PW) - application.properties
* ✅ SQL 쿼리 등록
* ⭐ 사용자 인증 쿼리
* ⭐ 사용자 권한 쿼리
* @return
*/
@Bean
public UserDetailsService userDetailsService() {
JdbcUserDetailsManager userDetailsManager
= new JdbcUserDetailsManager(dataSource);
// 사용자 인증 쿼리
String sql1 = " SELECT username, password, enabled "
+ " FROM user "
+ " WHERE username = ? "
;
// 사용자 권한 쿼리
String sql2 = " SELECT username, auth "
+ " FROM user_auth "
+ " WHERE username = ? "
;
userDetailsManager.setUsersByUsernameQuery(sql1);
userDetailsManager.setAuthoritiesByUsernameQuery(sql2);
return userDetailsManager;
}
}
Java
복사










프로젝트 생성 (이전 페이지)