728x90
1. 프로젝트 파일 생성

- Spring Web : 스프링을 이용하여 웹서비스를 구축하기 위함
- Lombok : 자바 개발 편의성을 위한 어노테이션을 사용하기 위함
- Thymeleaf : 스프링과 궁합이 잘 맞는 템플릿
- Spring Security : 로그인 기능을 구현하기 위함
- Spring Data JPA : DB 로 부터 데이터를 원활하게 주고 받기 위함
- MySQL Driver : DB로 MySQL을 이용하기 위함
- Validation : 입출력 값에 대한 검증
2. application.yml 설정
- DB 연결 (MySQL)

spring:
profiles:
active: local
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/rms?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul
username: 자신의 username
password: 자신의 password
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
show_sql: true
format_sql: true
use_sql_comments: true
logging.level:
org.springframework.security: DEBUG
org.hibernate.SQL: debug
# org.hibernate.type: trace
3. Spring Security 설정
- DB 데이터를 이용하여 로그인 기능을 구현하기 위해 설정
package project.RMS.config;
import lombok.RequiredArgsConstructor;
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.WebSecurityCustomizer;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@EnableWebSecurity
@Configuration
@RequiredArgsConstructor
public class WebSecurityConfig {
// PasswordEncoder Bean 등록 - password 암호화 (방식 - BCryptPasswordEncoder)
@Bean
public static PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
// WebSecurityCustomizer Bean 등록 - 정적 resources 접근을 위함
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
// 정적 리소스가 위치한 파일의 보안 처리를 무시 (누구든 접근 가능)
return (web -> web.ignoring()
.requestMatchers("/img/**", "/css/**"));
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authorizeRequests) ->
authorizeRequests
.requestMatchers("/").permitAll()
.anyRequest().authenticated()
)
.formLogin((form) ->
form
.usernameParameter("username")
.passwordParameter("password")
.loginPage("/loginPage")
.loginProcessingUrl("/login")
.failureUrl("/loginPage?error=true")
.defaultSuccessUrl("/", true)
.permitAll()
)
.logout(logout ->
logout
.logoutUrl("/logout") //로그아웃 처리 URL
.logoutSuccessUrl("/") //로그아웃 성공 후 리다이렉트 할 URL
.invalidateHttpSession(true)
.deleteCookies("JSESSIONID")
.permitAll()
)
;
return http.build();
}
}728x90