Please open Telegram to view this post
VIEW IN TELEGRAM
🎯 Как настроить CORS в Spring Boot
Когда фронт и бэк живут на разных доменах — CORS становится головной болью. Но Spring Boot даёт достаточно способов это настроить — от простых аннотаций до централизованной фильтрации.
1️⃣ Минимальная настройка — через @CrossOrigin
Если нужно открыть доступ только к одному контроллеру или методу:
Удобно для быстрого прототипа, но неудобно для масштабируемого решения.
2️⃣ Глобальная настройка через WebMvcConfigurer
Если CORS нужен везде, лучше использовать конфигурационный класс:
Даёт полный контроль. Можно задать разные правила для разных путей.
3️⃣ Настройка CORS через application.yml (Spring Cloud Gateway)
Если вы используете Gateway, настройка может быть ещё проще:
Подходит, если CORS должен работать до попадания запроса в конкретный микросервис.
4️⃣ CORS + безопасность
Если CORS работает «через раз», возможно, его блокирует Spring Security. Добавьте .cors() в конфигурацию:
5️⃣ Тестирование CORS
✅ Проверьте через curl:
Ответ должен содержать заголовки:
📌 Не оставляйте allowedOrigins("*") в проде. Это дыра в безопасности. Нужно чётко указывать домены.
💬 Как вы обычно настраиваете CORS в своих микросервисах?
🐸 Библиотека джависта #буст
Когда фронт и бэк живут на разных доменах — CORS становится головной болью. Но Spring Boot даёт достаточно способов это настроить — от простых аннотаций до централизованной фильтрации.
Если нужно открыть доступ только к одному контроллеру или методу:
@CrossOrigin(origins = "https://example.com")
@RestController
public class ApiController {
@GetMapping("/data")
public String getData() {
return "OK";
}
}
Удобно для быстрого прототипа, но неудобно для масштабируемого решения.
Если CORS нужен везде, лучше использовать конфигурационный класс:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("https://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true);
}
}
Даёт полный контроль. Можно задать разные правила для разных путей.
Если вы используете Gateway, настройка может быть ещё проще:
spring:
cloud:
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins: "https://example.com"
allowedMethods:
- GET
- POST
allowedHeaders: "*"
Подходит, если CORS должен работать до попадания запроса в конкретный микросервис.
Если CORS работает «через раз», возможно, его блокирует Spring Security. Добавьте .cors() в конфигурацию:
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.cors() // 👈 Без этого CORS не заработает
.and()
.authorizeHttpRequests(auth -> auth.anyRequest().permitAll());
return http.build();
}
}
✅ Проверьте через curl:
curl -H "Origin: https://example.com" \
-H "Access-Control-Request-Method: GET" \
-X OPTIONS http://localhost:8080/data -v
Ответ должен содержать заголовки:
Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET
Please open Telegram to view this post
VIEW IN TELEGRAM
DTO — штука вроде очевидная: "не светить сущностями наружу". Но что дальше?
🔹 Кто-то делает DTO только в контроллерах, а внутри работает с доменными объектами.
🔹 Кто-то строит слоистую модель DTO-шек, даже между сервисами и репозиториями.
🔹 А кто-то вообще говорит: «DTO везде — меньше связность, проще миграции, лучше тестируемость».
— Где заканчивается польза от DTO, а где начинается бессмысленная бюрократия?
— DTO только на границах приложения или вообще везде?
— Или пора забить и возвращать UserEntity напрямую в контроллер?
Please open Telegram to view this post
VIEW IN TELEGRAM
Работаете в большом проекте и устали искать, где находится метод или переменная? IntelliJ IDEA умеет молниеносно прыгать к исходному коду — всё, что нужно, это Ctrl + B (или Cmd + B на macOS).
🔹 Зачем это нужно
— Вместо ручного поиска по файлам вы сразу попадаете в нужное место в коде.
— Работает с методами, классами, интерфейсами, переменными, импортами и даже с SQL-мэппингами в JPA.
🔹 Как использовать
— Наведите курсор на интересующий метод, переменную или класс.
— Нажмите Ctrl + B (или Cmd + B на macOS).
— IDEA мгновенно откроет определение — будь то в вашем коде, в сторонней библиотеке или в decompiled-классе.
Очень удобно, когда нужно быстро понять, что именно делает вызываемый метод, особенно если работаете с чужим кодом.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Азбука айтишника
🎓 Как выбрать свою роль в Data Science и не потеряться в терминах
Если вы только начинаете разбираться в Data Science — перед вами лабиринт из названий: data scientist, аналитик, ML-инженер, BI, архитектор... Кто чем занимается? Что нужно учить?
➡️ Что внутри статьи
— Кто такие Data Engineer
— Чем отличается Data Architect от инженера и зачем он нужен в big data проектах
— Чем занимаются Data Analyst и почему это отличная точка входа в карьеру
— Что делает настоящий Data Scientist
В статье разобрано всё: от задач до технологий, которые реально спрашивают на собеседованиях.
📎 Ссылка
Азбука айтишника #ликбез
Если вы только начинаете разбираться в Data Science — перед вами лабиринт из названий: data scientist, аналитик, ML-инженер, BI, архитектор... Кто чем занимается? Что нужно учить?
— Кто такие Data Engineer
— Чем отличается Data Architect от инженера и зачем он нужен в big data проектах
— Чем занимаются Data Analyst и почему это отличная точка входа в карьеру
— Что делает настоящий Data Scientist
В статье разобрано всё: от задач до технологий, которые реально спрашивают на собеседованиях.
📎 Ссылка
Азбука айтишника #ликбез
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔍 Загадка для разработчиков
Что за паттерн загадан на картинке? Пишите в комменты ответ под спойлером.
💬 Рассказывайте интересные кейсы реализации из практики
🐸 Библиотека джависта #междусобойчик
Что за паттерн загадан на картинке? Пишите в комменты ответ под спойлером.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔹 Spring-потрошитель
Автор делится опытом анализа и оптимизации Spring-приложений, выявляя скрытые зависимости и избыточные компоненты.
Рассматриваются методы обнаружения неиспользуемых бинов, циклических зависимостей и других архитектурных дефектов, влияющих на производительность и поддерживаемость кода.
🔹 Тестирование CAP-теоремы на примере MongoDB
Автор проводит серию тестов с различными параметрами writeConcern и readConcern, анализируя их влияние на согласованность и доступность данных.
Рассматриваются реальные сценарии, включая сбои и аварийные ситуации, с целью выявления оптимальных настроек для обеспечения требуемых свойств системы.
🔹 Clean your Memory: From Finalize to Cleaner
Рассматриваются проблемы, связанные с finalize(), такие как непредсказуемость вызова и возможные утечки памяти.
Введение в Cleaner предоставляет более гибкий и эффективный механизм для освобождения ресурсов, улучшая производительность и стабильность приложений.
Please open Telegram to view this post
VIEW IN TELEGRAM