Spring Security 기초 문법 길잡이

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, 세션 관리 등 고급 보안 기술을 연계할 수 있어 확장성도 뛰어납니다.

댓글 남기기