[Spring Security] URI에 따라 접근 권한 부여하기 최신 버전

2024. 3. 5. 17:54BE/Spring

728x90

본 포스팅은 Spring Security에서 URI별로 접근 권한을 다르게 부여하는 최신 방법을 다룹니다.

chatGPT에게 물어보면 아래와 같이 대답해줍니다. 하지만, 이는 deprecated된 방법이므로 최신 방법으로 사용해야합니다.

이전 방법

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

    http.sessionManagement((sessionManagement) -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS))

            .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // resources 접근 허용 설정
                    .antMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll()
                    .antMatchers(HttpMethod.GET, "/lecture/**").permitAll() // lecture/1 URI에 대한 GET 메소드에 대해 모든 사용자 접근 가능
                    .antMatchers(HttpMethod.POST, "/lecture/**").hasAuthority("ROLE_ADMIN") // lecture/1 URI에 대한 POST 메소드에 대해 ROLE_ADMIN 권한 필요
                    .anyRequest().authenticated() // 그 외 모든 요청 인증처리
            )



    return http.build();
}

최신 방법

 @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {

        // 기본 설정인 Session 방식은 사용하지 않고 JWT 방식을 사용하기 위한 설정
        http.sessionManagement((sessionManagement) -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS))

                .authorizeHttpRequests((authorizeHttpRequests) -> authorizeHttpRequests.requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() // resources 접근 허용 설정
                        .requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll()
                        .requestMatchers(HttpMethod.GET, "/lecture/**").permitAll()
                        .requestMatchers(HttpMethod.POST, "/lecture", "/tutor").hasAuthority("ROLE_ADMIN")
                        .anyRequest().authenticated() // 그 외 모든 요청 인증처리
                )



        return http.build();
    }

부가 설명

  • "/swagger-ui/**", "/v3/api-docs/**" URI들은 모두 허용함. 이 설정은 외부에서 Swagger 페이지로 접속해야하기 때문에 열어놓음.
  • "/lecture"로 시작하는 URI에서 get method는 모두 허용함. 즉, 로그인 하지 않아도 get method 사용 가능.
  • "/lecture", "/tutor"의 post method를 사용할 때는 "ROLE_ADMIN" 권한이 있어야함.
  • 그리고 나머지 URI는 로그인해야만 접근 가능.