Spring Security는 스프링 프레임워크에서 제공하는 간편하고 강력한 인증 및 권한 부여 프레임워크입니다. 웹 애플리케이션에서 보안을 강화하는 데 필수적인 요소이며, 로그인, 로그아웃, 접근 제한 등 다양한 기능을 손쉽게 구현할 수 있습니다. Spring Security에서 자주 사용되는 핵심 문법들을 정리해 보겠습니다.
1. Security 설정 클래스
Spring Security는 Java Config 기반 설정을 자주 사용합니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable() // CSRF 비활성화 (개발 시)
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN") // 관리자만 접근
.antMatchers("/user/**").authenticated() // 로그인한 사용자만 접근
.anyRequest().permitAll() // 그 외는 모두 허용
.and()
.formLogin()
.loginPage("/login") // 커스텀 로그인 페이지
.defaultSuccessUrl("/") // 로그인 성공 후 이동 페이지
.and()
.logout()
.logoutSuccessUrl("/login?logout"); // 로그아웃 후 이동
}
}
2. 사용자 정보 설정 (UserDetailsService)
사용자 정보를 불러오기 위해 UserDetailsService를 구현합니다.
@Service
public class CustomUserDetailsService implements UserDetailsService {
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 실제로는 DB 조회로 대체
if (!username.equals("admin")) {
throw new UsernameNotFoundException("사용자를 찾을 수 없습니다.");
}
return User.builder()
.username("admin")
.password(new BCryptPasswordEncoder().encode("1234"))
.roles("ADMIN")
.build();
}
}
3. 비밀번호 암호화
비밀번호는 평문으로 저장하지 않고 반드시 암호화해야 합니다.
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
4. 로그인 상태 확인
템플릿(예: Thymeleaf)이나 코드에서 현재 로그인 정보를 확인할 수 있습니다.
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName(); // 현재 로그인한 사용자 이름
Spring Security는 설정이 복잡하고 어렵게 느껴질 수 있지만, 기초적인 기본 문법과 구조를 익히면 매우 유용합니다. 기본적인 설정 외에도 OAuth2, JWT, 세션 관리 등 고급 보안 기술을 연계할 수 있어 확장성도 뛰어납니다.