Что означает HTTP-статус 403 Forbidden?

«Что означает HTTP-статус 403 Forbidden?» — вопрос из категории Сети, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Код состояния HTTP 403 Forbidden указывает, что сервер понял запрос, но отказывается его авторизовать. В отличие от 401 Unauthorized (требуется аутентификация), здесь клиент аутентифицирован, но его прав недостаточно для доступа к ресурсу.

Типичные причины:

  • У пользователя нет необходимой роли или разрешения (например, доступ к админ-панели для роли USER).
  • Запрет доступа для определенного IP-адреса или диапазона.
  • Попытка доступа к системным файлам (например, в каталоге /WEB-INF/ или .htaccess).
  • Неправильная конфигурация прав на файловой системе веб-сервера.

Пример обработки в Spring Security:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/api/admin/**").hasRole("ADMIN") // Только ADMIN
                .antMatchers("/api/user/**").hasAnyRole("USER", "ADMIN")
                .anyRequest().authenticated()
            .and()
            .exceptionHandling()
                .accessDeniedHandler((request, response, accessDeniedException) -> {
                    // Кастомная логика обработки 403
                    response.setStatus(HttpServletResponse.SC_FORBIDDEN);
                    response.getWriter().write("Access Denied: Insufficient privileges");
                });
    }
}

Что делать при получении 403? Проверить корректность учетных данных, наличие необходимых прав и конфигурацию сервера.