web-dev-qa-db-fra.com

Comment ajouter une autorisation HTTP de base pour un point de terminaison spécifique avec une sécurité de printemps?

J'ai une application Spring Boot avec Spring Security. Un nouveau point final /health doit être configuré pour qu'il soit accessible via l'authentification HTTP de base. La configuration HttpSecurity actuelle est la suivante:

@Override
protected void configure(HttpSecurity http) throws Exception {

http.requestMatchers()
    .antMatchers(HttpMethod.OPTIONS, "/**")
    .and()
    .csrf()
    .disable()
    .authorizeRequests()
    .anyRequest()
    .permitAll()
    .and()
    .sessionManagement()
    .sessionCreationPolicy(SessionCreationPolicy.STATELESS);

}

Comment ajouter une authentification de base pour /health? Je suppose que j'ai besoin de quelque chose comme ça, mais je ne pense pas que cela soit tout à fait correct, et je ne comprends pas vraiment où l'ajouter exactement:

    .authorizeRequests()
    .antMatchers(
        // Health status
        "/health",
        "/health/"
    )
    .hasRole(HEALTH_CHECK_ROLE)
    .and()
    .httpBasic()
    .realmName(REALM_NAME)
    .authenticationEntryPoint(getBasicAuthEntryPoint())
    .and()
    .sessionManagement()
    .sessionCreationPolicy(SessionCreationPolicy.STATELESS)

J'ai trouvé ces ressources utiles, mais pas suffisantes:

6
dave

La solution consiste à implémenter plusieurs configurations, comme expliqué ici: https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#multiple-httpsecurity

5
dave
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/health/**").hasRole("SOME_ROLE")
            .anyRequest().authenticated()
            .and()
            .httpBasic()
            .and()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }


    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {


        auth
            .inMemoryAuthentication()
            .withUser("yourusername").password("yourpassword").roles("SOME_ROLE")

        ;
    }

}
0
pvpkiran