Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 371новая вакансия за сутки·54 593вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 604
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 396 кандидатов открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python8 800
  • Облачные технологии6 644
  • QA вакансии2 164
  • Android1 317
  • Инженер данных868
  • Продакт-менеджер314

Разработка

  • iOS1 229
  • Backend вакансии1 199
  • AI вакансии548
  • Fullstack вакансии495
  • Frontend вакансии424
  • Mobile вакансии28

По стеку

  • Go5 236
  • Java3 132
  • Kotlin1 120
  • Node.js1 005
  • Rust852
  • .NET659
  • PHP319
  • C++268
  • C#207

DevOps и инфраструктура

  • Kubernetes3 909
  • Linux-инфраструктура2 843
  • DevOps вакансии2 675
  • Terraform / IaC2 175
  • Мониторинг и Observability1 072
  • CI/CD915
  • SRE305
  • Кибербезопасность33

Аналитика и данные

  • Аналитик данных532
  • Data Scientist435
  • Бизнес-аналитик400
  • Системный аналитик68

Другие направления

  • Проджект-менеджер105
  • UI/UX дизайн68
  • Ручное тестирование14

По регионам

  • Вакансии в США25 825
  • Вакансии в Европе10 301
  • Работа в России3 618
  • Вакансии в Канаде2 268

По формату

  • Удалённые вакансии42 661
  • Релокация в США25 825
  • Гибридная работа5 655
  • Офисная работа4 440

По уровню

  • Senior вакансии22 599
  • Middle вакансии11 490
  • Junior вакансии3 852

Сейчас нанимают

Все компании
  • Rakuten189 вакансий
  • Wise187 вакансий
  • ASML164 вакансии
  • Grab134 вакансии
  • Celonis47 вакансий
  • Spotify37 вакансий
  • Infobip28 вакансий
  • Adyen27 вакансий
  • Monzo19 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме Spring BootВсе вопросы
Spring BootSeniorТеория

Как защитить REST API на Spring Boot с помощью Spring Security?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Настраивается через SecurityFilterChain: CSRF отключается, SessionCreationPolicy.STATELESS, правила authorizeHttpRequests по ролям, @EnableMethodSecurity для @PreAuthorize, кастомный AuthenticationEntryPoint возвращает 401 вместо редиректа.

Минимальная конфигурация SecurityFilterChain

@Configuration
@EnableWebSecurity
@EnableMethodSecurity   // включает @PreAuthorize, @PostAuthorize
public class ApiSecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        return http
            // REST API не использует сессии и CSRF-куки
            .csrf(AbstractHttpConfigurer::disable)
            .sessionManagement(s ->
                s.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            // правила авторизации
            .authorizeHttpRequests(auth -> auth
                .requestMatchers(HttpMethod.GET,  "/api/public/**").permitAll()
                .requestMatchers("/api/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            // возврат 401/403 вместо редиректа на /login
            .exceptionHandling(ex -> ex
                .authenticationEntryPoint((req, res, e) ->
                    res.sendError(HttpServletResponse.SC_UNAUTHORIZED))
                .accessDeniedHandler((req, res, e) ->
                    res.sendError(HttpServletResponse.SC_FORBIDDEN))
            )
            .build();
    }
}

RBAC через @PreAuthorize

@RestController
@RequestMapping("/api/orders")
public class OrderController {

    @GetMapping
    @PreAuthorize("hasAnyRole('USER','ADMIN')")
    public List<Order> list() { ... }

    @DeleteMapping("/{id}")
    @PreAuthorize("hasRole('ADMIN') or @orderService.isOwner(#id, authentication.name)")
    public void delete(@PathVariable UUID id) { ... }
}

Защита от распространённых атак

Rate limiting — через Bucket4j + Redis:

@Component
public class RateLimitFilter extends OncePerRequestFilter {
    private final Map<String, Bucket> buckets = new ConcurrentHashMap<>();

    @Override
    protected void doFilterInternal(HttpServletRequest req,
                                    HttpServletResponse res,
                                    FilterChain chain)
            throws ServletException, IOException {
        String ip = req.getRemoteAddr();
        Bucket bucket = buckets.computeIfAbsent(ip, k ->
            Bucket.builder()
                .addLimit(Bandwidth.classic(100,
                    Refill.greedy(100, Duration.ofMinutes(1))))
                .build());
        if (bucket.tryConsume(1)) {
            chain.doFilter(req, res);
        } else {
            res.setStatus(429);
        }
    }
}

Security headers через application.yml или конфигурацию:

.headers(h -> h
    .contentSecurityPolicy(csp ->
        csp.policyDirectives("default-src 'self'"))
    .frameOptions(HeadersConfigurer.FrameOptionsConfig::deny)
    .httpStrictTransportSecurity(hsts ->
        hsts.includeSubDomains(true).maxAgeInSeconds(31536000))
)

Настройка CORS для фронтенда

@Bean
public CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowedOrigins(List.of("https://app.example.com"));
    config.setAllowedMethods(List.of("GET","POST","PUT","DELETE","OPTIONS"));
    config.setAllowedHeaders(List.of("Authorization","Content-Type"));
    config.setAllowCredentials(true);
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/api/**", config);
    return source;
}

Подводные камни

  • Отключать CSRF для REST правильно только при STATELESS-сессиях; если вы используете cookie-сессии — CSRF нужен.
  • Порядок правил в authorizeHttpRequests важен: более специфичные паттерны должны идти раньше anyRequest().
  • @EnableMethodSecurity не работает без проксирования — вызов защищённого метода из того же бина обходит проверку.
  • Без кастомного AuthenticationEntryPoint Spring Security редиректит на /login — для REST API это 302, а не 401.
  • CORS-конфигурация в Spring Security и в @CrossOrigin могут конфликтовать — используйте один источник истины.
  • Логировать тело запроса в фильтре безопасности рискованно — можно случайно залогировать пароль или токен.
  • Actuator-эндпоинты (/actuator/**) нужно явно закрыть или ограничить ролью ACTUATOR.

Частые вопросы на собеседовании

  • Как реализовать health checks в Spring Boot Actuator?
  • Что делает аннотация @SpringBootApplication?
  • Что такое Spring Boot и чем он отличается от Spring Framework?
  • В каких backend-проектах Spring Boot является сильным выбором, а где лучше выбрать более простой или другой стек?

Типичные ошибки

  • Путать термин «spring security rest api» с соседним механизмом Spring Boot.
  • Не называть границу lifecycle, transaction, thread или request для «spring security rest api».
  • Игнорировать production-эффекты «spring security rest api»: latency, SQL shape, memory, security или observability.

Что проверяет интервьюер

  • Попросить объяснить механизм «spring security rest api» на минимальном примере.
  • Проверить, видит ли кандидат failure mode и диагностику для «spring security rest api».
  • Уточнить, какие настройки или API меняют «spring security rest api» в реальном сервисе.

Как вы знаете этот вопрос?

Проверить себя по теме Spring Boot →

Источники

  • https://docs.spring.io/spring-boot/reference/web/spring-security.html
←Предыдущий вопросЧто такое Spring Boot Actuator и какие endpoint'ы он открывает по умолчанию?Следующий вопрос→Как писать unit-тесты и интеграционные тесты в Spring Boot?

Связанные темы

Spring Bootapi-securitythreat-modeling