[스프링] 스프링 시큐리티를 이용한 접근 제어

스프링은 많은 기능 중 하나로 스프링 시큐리티라는 모듈을 제공합니다. 이 모듈은 웹 애플리케이션에 보안을 쉽게 적용할 수 있게 도와주며, 접근 제어 기능을 제공합니다.

1. 스프링 시큐리티 설정

먼저 프로젝트에 스프링 시큐리티를 설정해야 합니다. pom.xml 파일에 다음 종속성을 추가합니다.

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>5.4.1</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>5.4.1</version>
</dependency>

2. 접근 제어 설정

WebSecurityConfigurerAdapter를 상속한 클래스를 생성하고 @EnableWebSecurity 어노테이션을 사용하여 시큐리티를 활성화합니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")
                .antMatchers("/user/**").hasRole("USER")
                .anyRequest().authenticated()
            .and()
            .formLogin();
    }
}

위 설정은 /admin/** 경로는 ADMIN 권한이 필요하고, /user/** 경로는 USER 권한이 필요하며, 나머지 요청은 인증된 사용자만 접근할 수 있도록 설정합니다.

3. 사용자 및 권한 관리

사용자 및 권한 정보는 데이터베이스에 저장하고, UserDetailsService를 구현하여 사용자 정보를 가져올 수 있습니다.

@Service
public class CustomUserDetailsService implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        User user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("User not found");
        }
        return new CustomUserDetails(user);
    }
}

4. 마무리

이제 스프링 시큐리티를 사용하여 웹 애플리케이션에 접근 제어를 적용할 수 있습니다.

더 자세한 정보는 공식 문서를 참고하세요.

저자: [Your Name]