Java Portal | Программирование
12.7K subscribers
1.26K photos
105 videos
38 files
1.22K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Совет по Spring Boot: со Spring Boot и Spring Security ты можешь легко защитить эндпоинты.

Чтобы защитить следующий REST-эндпоинт:

@RestController
public class MyController {

@GetMapping
("/admin")
public String admin() {
...
}
...
}


Можно написать такую конфигурацию:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin").authenticated()
.anyRequest().permitAll()
.and()
.httpBasic();
}
}



- authorizeRequests(): начинает описание эндпоинтов, которым нужна защита.
- antMatchers("/admin").authenticated(): требует аутентификацию для /admin.
- anyRequest().permitAll(): все остальные эндпоинты публичные.
- httpBasic(): включает HTTP Basic Auth.


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
8
Как прогреть кэши в Spring Boot?

Или вообще как выполнить что-то на старте Spring Boot приложения?

Обычно такие операции делают в @PostConstruct или подписываются на событие ApplicationReadyEvent. Но у этих вариантов есть заметный минус.

Если “прогрев” находится в @PostConstruct, как отключить его в тестах? Можно добавить флаг, сделать сабкласс и подменить его в тестовой конфигурации, но это не всегда помогает и часто выглядит как костыль.

Более элегантный способ “прогреть кэши”

Смотри: SpringApplication.run(...) возвращает полностью готовый контекст. Можно достать из него компонент и вызвать нужный метод “прогрева”.

Код выглядит как на картинке:

Плюс: В интеграционных тестах с @SpringBootTest метод main не запускается. Соответственно, код внутри него не выполняется. Никаких костылей вокруг @PostConstruct, все чисто и красиво.

Когда “прогрев” все-таки нужен в тестах, добавляем параметр use main method:

@SpringBootTest(useMainMethod = SpringBootTest.UseMainMethod.ALWAYS)


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6