[java] 스프링 시큐리티에서의 URL 보호

스프링 시큐리티는 자바 기반의 웹 애플리케이션에서 보안을 구현하기 위한 프레임워크입니다. 스프링 시큐리티를 사용하여 애플리케이션의 URL을 보호하는 방법을 살펴보겠습니다.

URL 보호 설정

스프링 시큐리티에서 URL 보호를 구현하기 위해서는 WebSecurityConfigurerAdapter를 상속하는 클래스를 만들어야 합니다. 아래의 예제 코드를 참고해보세요.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/admin/**").hasRole("ADMIN")   // /admin으로 시작하는 URL은 ADMIN 권한이 필요함
                .antMatchers("/user/**").hasAnyRole("ADMIN", "USER")   // /user로 시작하는 URL은 ADMIN 또는 USER 권한이 필요함
                .anyRequest().authenticated()   // 나머지 URL은 인증이 필요함
            .and()
                .formLogin()
                    .loginPage("/login")   // 로그인 페이지 설정
                    .permitAll()
            .and()
                .logout()
                    .logoutUrl("/logout")   // 로그아웃 URL 설정
                    .permitAll();
    }
    
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("admin").password("{noop}password").roles("ADMIN")   // ADMIN 권한을 가진 사용자 설정
                .and()
                .withUser("user").password("{noop}password").roles("USER");   // USER 권한을 가진 사용자 설정
    }
}

위의 코드에서 configure(HttpSecurity http) 메서드는 URL에 대한 보안 규칙을 설정하고, configure(AuthenticationManagerBuilder auth) 메서드는 사용자 인증을 설정합니다.

위의 예제에서는 /admin/**으로 시작하는 URL은 “ADMIN” 권한이 필요하며, /user/**으로 시작하는 URL은 “ADMIN” 또는 “USER” 권한이 필요합니다. 나머지 모든 URL은 인증이 필요합니다. 로그인 페이지는 /login로 설정되어 있으며, 로그아웃 URL은 /logout로 설정되어 있습니다.

사용자 인증

위의 예제에서는 inMemoryAuthentication() 메서드를 사용하여 메모리 내에 사용자를 설정했습니다. withUser() 메서드를 사용하여 사용자 이름과 비밀번호를 지정하고, roles() 메서드를 사용하여 사용자 권한을 설정합니다.

실제 운영 환경에서는 데이터베이스를 사용하여 사용자 인증을 수행하는 것이 일반적입니다. 스프링 시큐리티는 JPA, JDBC, LDAP 등 다양한 인증 메커니즘을 지원하므로, 필요한 경우 해당 기술을 사용하여 사용자 인증을 구현할 수 있습니다.

참고 자료

위의 참고 자료에서 더 자세한 내용을 확인할 수 있습니다.