У нас есть приложение с начальной загрузкой (версия с начальной загрузкой 2.1.4), которое предоставляет API отдыха, защищенный с помощью OAuth2. Нам также необходимо предоставить конечные точки проверки работоспособности (Actuator), предоставляемые Spring Boot, устаревшему инструменту мониторинга, который поддерживает только базовую аутентификацию c. Однако, начиная с Spring Boot 2, Actuator разделяет конфигурацию безопасности с обычными правилами безопасности приложения, поэтому единственные варианты, которые я вижу до сих пор, - это защитить его с помощью Oauth2 или оставить его незащищенным (.permitAll()
).
Я пытаюсь использовать отдельные WebSecurityConfigurerAdapter (s) для настройки провайдера аутентификации httpBasi c для конечных точек привода и oauth2 для конечных точек API, играя с исполнением @Order, но оба провайдера аутентификации кажутся взаимоисключающими .
Добавьте две реализации WebSecurityConfigurerAdapter:
- Для привода:
@Configuration
@Order(1)
public class ActuatorConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin").password("password")
.roles("ADMIN", "USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// requestMatchers(EndpointRequest.to(MetricsEndpoint.class))
.antMatchers("/actuator/**")
.hasAnyRole("ADMIN","USER").and().authorizeRequests().and().httpBasic();
}
}
Для API:
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@Order(10)
public class SecurityConfiguration2 extends WebSecurityConfigurerAdapter {
@Autowired
private CorsFilter corsFilter;
@Override
public void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.cors()
.and()
.addFilterBefore(corsFilter, CsrfFilter.class)
.exceptionHandling()
.authenticationEntryPoint(new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED))
.and()
.headers()
.and()
.authorizeRequests()
.antMatchers("/v2/api-docs").permitAll()
.antMatchers("/authenticate").permitAll()
.antMatchers("/customer/**").hasAuthority("MARKETING")
.anyRequest().authenticated()
.and()
.oauth2Login() // generates the /login page
.successHandler(successHandler())
...
}
Любые советы, как я могу сделать эту работу высоко ценится.