Изначально я думал, что настройка management.ssl.enable=false
поможет, но это не так. То, что я закончил, сработало для меня, так это добавление правила исключения ssl только для конечной точки /health
.
Вот сокращенная версия моего SecurityConfiguration
, который является @Configuration
аннотированным классом, который расширяет / реализует WebSecurityConfigurerAdapter/WebSecurityConfigurer
.
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/secure-path").hasAuthority("SOME_ROLE")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login")
.permitAll()
.and()
.exceptionHandling();
if (securityProperties.isRequireSsl()) {
//allow health checks to be over http
http.requiresChannel().antMatchers("/health").requiresInsecure();
http.requiresChannel().anyRequest().requiresSecure();
}
}
ключом была requiresInsecure()
для конечной точки /health
. Обратите внимание, порядок важен, обычно в Spring Security более конкретные правила должны стоять на первом месте.