Совет по Spring Boot: со Spring Boot и Spring Security ты можешь легко защитить эндпоинты.
✅ Чтобы защитить следующий REST-эндпоинт:
✅ Можно написать такую конфигурацию:
-
-
-
-
👉 Java Portal
@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.Please open Telegram to view this post
VIEW IN TELEGRAM
❤8
Как прогреть кэши в Spring Boot?
Или вообще как выполнить что-то на старте Spring Boot приложения?
Обычно такие операции делают в
Если “прогрев” находится в
Более элегантный способ “прогреть кэши”
Смотри:
Код выглядит как на картинке:
Плюс: В интеграционных тестах с
Когда “прогрев” все-таки нужен в тестах, добавляем параметр
👉 Java Portal
Или вообще как выполнить что-то на старте Spring Boot приложения?
Обычно такие операции делают в
@PostConstruct или подписываются на событие ApplicationReadyEvent. Но у этих вариантов есть заметный минус.Если “прогрев” находится в
@PostConstruct, как отключить его в тестах? Можно добавить флаг, сделать сабкласс и подменить его в тестовой конфигурации, но это не всегда помогает и часто выглядит как костыль.Более элегантный способ “прогреть кэши”
Смотри:
SpringApplication.run(...) возвращает полностью готовый контекст. Можно достать из него компонент и вызвать нужный метод “прогрева”.Код выглядит как на картинке:
Плюс: В интеграционных тестах с
@SpringBootTest метод main не запускается. Соответственно, код внутри него не выполняется. Никаких костылей вокруг @PostConstruct, все чисто и красиво.Когда “прогрев” все-таки нужен в тестах, добавляем параметр
use main method:@SpringBootTest(useMainMethod = SpringBootTest.UseMainMethod.ALWAYS)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6