Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
HTTP статус код 403 (Forbidden)
Определение
Код ответа 403 Forbidden означает, что сервер понял запрос клиента, но отказывает в доступе к требуемому ресурсу. Это статус успешного получения запроса (в отличие от 404), но с запретом доступа.
Ключевое отличие от 401
Это важно различать:
- 401 Unauthorized — клиент не аутентифицирован (не вошёл в систему)
- 403 Forbidden — клиент аутентифицирован, но не имеет прав на доступ
401: "Кто ты?"
403: "Я знаю, кто ты, но я тебе не доверяю"
Примеры ситуаций с 403
Пример 1: Недостаточно прав доступа
Пользователь пытается удалить пост другого пользователя:
DELETE /api/posts/123
Ответ: 403 Forbidden
Потому что пост принадлежит другому пользователю,
и текущий пользователь не имеет прав на его удаление.
Пример 2: IP-адрес заблокирован
Сервер блокирует определённые IP-адреса в своем брандмауэре.
Попытка подключиться с запрещённого IP:
Ответ: 403 Forbidden
Пример 3: Доступ к защищённому ресурсу
Попытка получить доступ к приватным данным:
GET /api/admin/users
Ответ: 403 Forbidden
Ответ аутентифицирован, но не является администратором.
Обработка 403 в Java-приложениях
С использованием Spring Security:
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api/admin")
public class AdminController {
@GetMapping("/users")
@PreAuthorize("hasRole('ADMIN')")
public List<User> getAllUsers() {
return userService.findAll();
}
}
Если пользователь не имеет роли ADMIN, вернётся 403 Forbidden.
Кастомная обработка:
@RestController
public class PostController {
@DeleteMapping("/posts/{id}")
public ResponseEntity<?> deletePost(@PathVariable Long id,
@AuthenticationPrincipal User user) {
Post post = postService.findById(id);
if (!post.getOwner().getId().equals(user.getId())) {
return ResponseEntity.status(HttpStatus.FORBIDDEN)
.body(new ErrorResponse("You don't have permission to delete this post"));
}
postService.delete(post);
return ResponseEntity.ok().build();
}
}
Обработка 403 на клиенте (в REST запросах)
С использованием Spring RestTemplate:
try {
restTemplate.getForObject("/api/admin/users", List.class);
} catch (HttpClientErrorException.Forbidden e) {
System.out.println("Доступ запрещён: " + e.getMessage());
}
С использованием Spring WebClient:
webClient.get()
.uri("/api/admin/users")
.retrieve()
.onStatus(HttpStatus.FORBIDDEN::equals, response ->
Mono.error(new AccessDeniedException("Доступ запрещён"))
)
.bodyToMono(List.class);
Причины возникновения 403
- Отсутствие нужной роли — пользователь не администратор
- Недостаточно прав — пользователь может читать, но не писать
- CORS — браузер блокирует запрос
- IP-фильтрация — сервер блокирует определённые IP-адреса
- Геолокация — доступ ограничен по стране
- Состояние ресурса — ресурс не в состоянии для операции
Как решить 403
- Проверить, что у вас есть нужные права доступа
- Убедиться, что вы аутентифицированы правильно
- Проверить CORS настройки сервера
- Связаться с администратором сервера для получения прав
- Проверить логи сервера для деталей блокировки