웹/Spring

Spring Security에서 사용자 인가하기

Themion 2022. 4. 12. 15:12

Backend에서 여러 기능을 구현하다 보면, 사용자를 몇 가지 종류로 구분해야 하는 경우가 생긴다. 각 사용자는 구분에 따라 할 수 있는 기능도 다르고, 접근 권한도 다르다. Spring Security에서는 이러한 기능을 인가를 통해 구현한다.

Spring Security에서 인증 과정이 여러 클래스를 구현해 복잡하게 진행되었다면, 인가 과정은 훨씬 간단하다. Spring Security의 설정 클래스에서 configure 메소드를 오버라이드한 뒤 특정 path에 필요 권한을 추가하면, Spring Security가 사용자의 권한에 따라 해당 path로의 접근을 허용하거나 차단하기 때문이다.

public class SecurityConfig extends WebSecurityConfigurerAdapter {

    // ... 기존 코드들 ...

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // form 기반으로 로그인 진행
            .formLogin()
                .and()
            // 각 path에 특정 권한 부여
            .authorizeRequests()
                // "/test" 경로에 일반 권한인 "Authority" 등이 있는지 확인
                .antMatchers("/test1").hasAuthority("Authority1")
                .antMatchers("/test2").hasAuthority("Authority2")
                .antMatchers("/test3").hasAuthority("Authority3")
                .antMatchers("/test4").hasAuthority("Authority4")
                // "/user" 경로에 특수한 권한인 "USER" Role이 있는지 확인
                .antMatchers("/user").hasRole("USER")
                // "/users" 경로에 특수한 권한인 "ADMIN" Role이 있는지 확인
                .antMatchers("/users").hasRole("ADMIN")
                ;
    }
    
    // ... 기존 코드들 ...
}

위 코드를 보면 오버라이드된 configure 메소드에서 메소드를 탭으로 구분해 가며 호출한 것을 볼 수 있는데, 이는 formLogin 메소드의 .and() 메소드가 configure의 인자인 http를 반환하는 메소드이기 때문이다. 이런 식으로 configure에선 여러 인증 필터를 자유롭게 추가할 수 있다.