Spring Security는 Java 기반 애플리케이션의 보안을 강화하기 위한 강력한 프레임워크로 인증(Authentication)과 권한 부여(Authorization)를 포함하여 다양한 보안 기능을 제공한다.
- 인증(Authentication): 사용자의 신원을 확인하는 과정이다. 예를 들어, 사용자 이름과 비밀번호를 확인하여 사용자가 누구인지 파악한다.
- 권한 부여(Authorization): 인증된 사용자가 특정 자원에 접근할 수 있는 권한이 있는지를 결정하는 과정이다.
1.의존성 추가 (maven - pom.xml설정)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
2.기본 보안 설정(WebSecurityConfigurerAdapter를 확장하여 설정)
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; @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/home").permitAll() // 특정 경로는 인증 없이 접근 가능 .anyRequest().authenticated() // 나머지 요청은 인증 필요 .and() .formLogin() .loginPage("/login") // 로그인 페이지 설정 .permitAll() // 로그인 페이지는 인증 없이 접근 가능 .and() .logout() .permitAll(); // 로그아웃은 인증 없이 가능 } }
3.사용자 인증 정보 설정(Spring Security는 메모리 내에서 사용자 정보를 저장)
import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 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(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user") .password(passwordEncoder().encode("password")) .roles("USER") .and() .withUser("admin") .password(passwordEncoder().encode("admin")) .roles("ADMIN"); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
spring Security로 기본 보안은 갖췄으나 추가 보안이 필요하다 판단할 시 아래와 같이 추가 설정을 진행 갖췄으나 추가 보안이 필요하다 판단할 시 아래와 같이 추가 설정을 진행
HTTPS 사용: 애플리케이션을 HTTPS로 배포하여 데이터 전송 시 보안을 강화.
CSRF 보호: 기본적으로 Spring Security는 CSRF(Cross-Site Request Forgery) 공격을 방지합니다. 이를 위해 CSRF 토큰을 사용.
세션 관리: 세션 고정 공격을 방지하기 위해 세션 관리 설정을 조정 가능.