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

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

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 105
  • Облачные технологии14 073
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 805
  • Продакт-менеджер1 266

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

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

  • Kubernetes7 763
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 261
  • CI/CD3 240
  • Мониторинг и Observability1 783
  • SRE566
  • Кибербезопасность453

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

  • Data Scientist1 140
  • Бизнес-аналитик930
  • Аналитик данных853
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США43 685
  • Вакансии в Европе23 684
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 887
  • Релокация в США43 685
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

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

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 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.

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

  • Путать термин «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

Вакансии с этим навыком

  • FullStack Developer - Java & Angular
  • Java Developer (with German)
  • Senior Full Stack разработчик
  • Programista Backend / Software Engineer
  • Automation QA Engineer (Java)

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

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