1. IDE
Intellij
2. 오늘 공부 내용
Spring Security
기본 개념
- 인증 ( Authentication) - 사용자가 누구인지 확인하는 과정
- 인가 (Authorization) - 인증된 사용자가 권한을 가지고 잇는지 확인하는 과정
- 필터 체인 - 보안 필터들이 차례대로 실행되어 요청과 응답 사이에서 보안 검사를 수행
주요 기능
- 기본 인증 흐름
- 사용자 요청이 들어옴: 사용자가 웹 애플리케이션에 로그인 요청을 합니다.
- AuthenticationManager: 사용자 자격 증명(예: 사용자 이름과 비밀번호)을 확인하는 역할을 합니다.
- AuthenticationProvider: 실제로 인증 논리를 수행하며, 다양한 방식의 인증(예: 비밀번호 기반, OAuth2, JWT 등)을 처리할 수 있습니다.
- UserDetailsService: 사용자 정보를 데이터베이스나 메모리에서 가져오는 서비스로, 사용자 이름을 기반으로
UserDetails 객체를 반환합니다.
- SecurityContext: 인증된 사용자 정보를 저장하고 관리하는 컨텍스트입니다. 이 컨텍스트는 애플리케이션 내에서 전역적으로 접근 가능합니다.
- WebSecurityConfigurerAdapter - 보안 설정을 구성하기 위해 사용, 보안 설정을 커스터마이징 할 수 있음
configure(HttpSecurity http): URL 경로 기반으로 보안 설정을 구성하는 메서드입니다.
configure(AuthenticationManagerBuilder auth): 사용자 인증을 위해 AuthenticationProvider나 UserDetailsService 설정을 정의합니다.
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable() // CSRF 보호를 비활성화
.authorizeRequests()
.antMatchers("/public/**").permitAll() // /public/ 경로는 모두 접근 가능
.antMatchers("/admin/**").hasRole("ADMIN") // /admin/ 경로는 관리자만 접근 가능
.anyRequest().authenticated() // 그 외 모든 요청은 인증 필요
.and()
.formLogin()
.loginPage("/login") // 로그인 페이지 설정
.permitAll() // 로그인 페이지는 모두 접근 가능
.and()
.logout()
.permitAll(); // 로그아웃은 모두 접근 가능
}
}