[java] 스프링 시큐리티 기본 개념

스프링 시큐리티는 인증(authentication)과 권한부여(authorization) 기능을 제공하는 자바 기반 보안 프레임워크입니다. 스프링 시큐리티를 사용하면 안전한 웹 애플리케이션을 개발할 수 있습니다.

인증(Authentication)

인증은 사용자가 애플리케이션에 접근할 권한이 있는지 확인하는 과정입니다. 스프링 시큐리티는 다양한 인증 방법을 제공합니다.

폼 기반 인증(Form-Based Authentication)

폼 기반 인증은 사용자가 웹 폼에 로그인 정보를 입력하여 인증하는 방식입니다. 스프링 시큐리티는 자체적으로 폼 기반 인증을 구현할 수 있습니다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .permitAll();
}

기타 인증 방법

스프링 시큐리티는 폼 기반 인증 외에도 다양한 인증 방법을 지원합니다. 예를 들면 OAuth, LDAP, OpenID Connect 등이 있습니다.

권한부여(Authorization)

권한부여는 인증된 사용자가 특정 리소스에 접근할 수 있는지 여부를 결정하는 과정입니다. 스프링 시큐리티는 권한부여를 위한 강력한 매커니즘을 제공합니다.

URL 기반 접근 제어

URL 기반 접근 제어는 특정 URL에 대한 접근 권한을 설정하는 방식입니다. 예를 들어, “admin” 권한이 있는 사용자만 “/admin” 경로에 접근할 수 있도록 설정할 수 있습니다.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/admin").hasRole("admin")
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .loginPage("/login")
            .permitAll()
            .and()
        .logout()
            .permitAll();
}

메소드 기반 접근 제어

메소드 기반 접근 제어는 특정 메소드에 접근 권한을 설정하는 방식입니다. 예를 들어, “admin” 권한이 있는 사용자만 ‘deleteUser()’ 메소드를 호출할 수 있도록 설정할 수 있습니다.

@PreAuthorize("hasRole('admin')")
public void deleteUser(String userName) {
    // 사용자 삭제 로직
}

참고 자료