권한 부여 구성: 제한 적용

  • 엔드포인트에 따라 권한 부여 제약 조건을 적용하는 방법

    • MVC 선택기

    • 앤트 선택기

    • 정규식 선택기

8.1. 선택기 메서드로 엔드포인트 선택


@Configuration
public class ProjectConfig {

    ...

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(auth -> auth.requestMatchers("/hello").hasRole("ADMIN")
                .anyRequest().permitAll());

        return http.build();
    }
}
  • 5.7 이후로 책 내용은 deprecated 되어 requestMatchers를 사용한다.

  • anyRequest()가 없이도 동작하지만 명시적으로 적어주는 게 좋다.

  • 선택기로 요청을 참조할 때는 특정한 규칙부터 일반적인 규칙의 순서로 지정해야 한다.

    • anyRequest()가 requestMatchers() 앞으로 먼저 올 수 없다.

미인증과 인증 실패

  • anyRerquest().permitAll()로 지정했음에도 요청 시 인증 정보를 담아 보냈다면 프레임워크는 이를 확인해야 하므로 401을 반환한다.

  • 권한 부여 필터보다 인증 필터가 앞에 있기 때문에 권한 필터가 허용하더라도 인증 필터는 권한 부여 필터로 전달하지 않고 401을 보낸다.

8.2. MVC 선택기로 권한을 부여할 요청 선택


@Configuration
public class ProjectConfig {

    ...

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(auth -> auth.requestMatchers(HttpMethod.POST, "/hello").hasRole("ADMIN")
                .anyRequest().authenticated());

        return http.build();
    }
}
  • Http 메서드를 지정할 수 있다.

  • 경로식

    • /**

    • 수에 제한없이 나타낼 수 있다.

    • ex. /a**/c = /a/b/c = /a/b/d/c = /a/b/c/d/e/c

  • 정규식도 사용 가능하다.

8.3. 앤트 선택기로 권한을 부여할 요청 선택

  • MVC 선택기는 경로 뒤에 /를 추가해도 똑같이 동작한다.

  • 앤트 선택기는 /hello와 /hello/를 다르게 처리한다.

  • MVC 선택기를 사용해야 경로 매핑과 관련한 위험을 예방할 수 있다.

8.4. 정규식 선택기로 권한을 부여할 요청 선택

  • 어떤 문자열이든지 나타날 수 있으므로 가능성이 무한하다.

  • 읽기 어렵다는 단점이 있다.

Last updated

Was this helpful?