Библиотека джависта | Java, Spring, Maven, Hibernate
24.8K subscribers
1.88K photos
38 videos
42 files
2.67K links
Все самое полезное для Java-разработчика в одном канале.

Список наших каналов: https://yangx.top/proglibrary/9197

Для обратной связи: @proglibrary_feeedback_bot

По рекламе: @proglib_adv

РКН: https://gosuslugi.ru/snet/67a5bbda1b17b35b6c1a55c4
加入频道
🎯 Как настроить CORS в Spring Boot

Когда фронт и бэк живут на разных доменах — CORS становится головной болью. Но Spring Boot даёт достаточно способов это настроить — от простых аннотаций до централизованной фильтрации.

1️⃣ Минимальная настройка — через @CrossOrigin

Если нужно открыть доступ только к одному контроллеру или методу:
@CrossOrigin(origins = "https://example.com")
@RestController
public class ApiController {
@GetMapping("/data")
public String getData() {
return "OK";
}
}


Удобно для быстрого прототипа, но неудобно для масштабируемого решения.

2️⃣ Глобальная настройка через WebMvcConfigurer

Если 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);
}
}


Даёт полный контроль. Можно задать разные правила для разных путей.

3️⃣ Настройка CORS через application.yml (Spring Cloud Gateway)

Если вы используете Gateway, настройка может быть ещё проще:
spring:
cloud:
gateway:
globalcors:
corsConfigurations:
'[/**]':
allowedOrigins: "https://example.com"
allowedMethods:
- GET
- POST
allowedHeaders: "*"


Подходит, если CORS должен работать до попадания запроса в конкретный микросервис.

4️⃣ 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();
}
}


5️⃣ Тестирование CORS

Проверьте через 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


📌 Не оставляйте allowedOrigins("*") в проде. Это дыра в безопасности. Нужно чётко указывать домены.

💬 Как вы обычно настраиваете CORS в своих микросервисах?

🐸 Библиотека джависта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
DTO везде или строго на входе/выходе?

DTO — штука вроде очевидная: "не светить сущностями наружу". Но что дальше?

🔹 Кто-то делает DTO только в контроллерах, а внутри работает с доменными объектами.
🔹 Кто-то строит слоистую модель DTO-шек, даже между сервисами и репозиториями.
🔹 А кто-то вообще говорит: «DTO везде — меньше связность, проще миграции, лучше тестируемость».

💬 Вопрос к вам:

— Где заканчивается польза от DTO, а где начинается бессмысленная бюрократия?
— DTO только на границах приложения или вообще везде?
— Или пора забить и возвращать UserEntity напрямую в контроллер?

🐸 Библиотека джависта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👑 Магия IntelliJ IDEA

Работаете в большом проекте и устали искать, где находится метод или переменная? 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
🎓 Как выбрать свою роль в Data Science и не потеряться в терминах

Если вы только начинаете разбираться в 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
🆕 Java Digest: подборка материалов

🔹 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