[스프링] 스프링 시큐리티를 이용한 데이터 보안 설정

스프링은 많은 기능과 모듈을 제공하며, 그 중에서도 시큐리티 모듈은 웹 애플리케이션의 데이터 보안에 도움을 줍니다. 스프링 시큐리티를 이용하면 인증, 권한 부여, 보안 설정 등을 손쉽게 처리할 수 있습니다.

1. 시큐리티 의존성 추가

먼저, pom.xml 파일에 스프링 시큐리티 의존성을 추가합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

의존성을 추가한 후에는 mvn clean install을 실행하여 의존성을 다운로드 받아야 합니다.

2. 보안 설정 파일 생성

스프링 시큐리티를 이용한 보안 설정을 하려면 SecurityConfig 클래스를 생성해야 합니다. 이때, 해당 클래스는 WebSecurityConfigurerAdapter를 확장해야 합니다.

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin();
    }
}

위의 코드에서는 /public/** 경로는 권한이 없어도 접근이 가능하도록 설정되었습니다. 그 외의 경로는 모두 인증을 거쳐야 합니다.

3. 사용자 정의 보안 설정

이제 사용자가 정의한 보안 설정을 적용하려면 UserDetailsService를 구현하고, AuthenticationProvider를 구현하여 사용자 정보를 로드하고 인증 과정을 처리합니다.

@Service
public class CustomUserDetailsService implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // 사용자 정보를 데이터베이스나 다른 곳에서 가져와서 UserDetails 객체로 반환
    }
}

@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {

    @Autowired
    private CustomUserDetailsService userDetailsService;

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        // 사용자의 인증 처리 후 Authentication 객체를 반환
    }

    @Override
    public boolean supports(Class<?> authentication) {
        return authentication.equals(UsernamePasswordAuthenticationToken.class);
    }
}

마무리

스프링 시큐리티를 이용한 데이터 보안 설정은 매우 유연하고 다양한 기능을 제공합니다. 위의 설정을 기반으로하여 필요에 맞게 보안 설정을 추가하고, 사용자의 데이터를 안전하게 보호하는 웹 애플리케이션을 개발할 수 있습니다.


참조: