come configurare percorsi diversi con Spring Security?

ho difficoltà a configurare la sicurezza per alcuni percorsi diversi che ho.

vorrei questa struttura:

/actuator/health <-- open
/api/** <-- hasAnyAuthority
/auth/** <-- basic authentication
all others no access

finora questo è quello che ho

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .antMatcher("/**") // If you want to override the security provided by Spring Boot.
            .addFilter(preAuthFilter())
            .cors()
                .and()
            .csrf().disable()
            .authorizeRequests()
                .antMatchers("/actuator/health").permitAll()
                .antMatchers("/api/**").hasAnyAuthority("something")
                .antMatchers("/auth/**").authenticated()
                .and()
            .httpBasic();
    }

vorrei aggiungere .anyRequest().denyAll(), ma che non sembra essere possibile dopo httpBasic().

chiunque può confermare che il codice di cui sopra sarà lo stesso di quello che vorrei?

EN From: How to configure different paths with Spring Security?

More similar articles:

5 Comments

  1. dal momento che si hanno percorsi di contesto diversi sarebbe abbastanza facile avere classi separate con la propria configurazione per ciascuno di essi.

  2. esempio su come dividere la configurazione per path:

    @Configuration
    public class ApiSecurityConfiguration extends WebSecurityConfigurerAdapter{
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.antMatcher("/api/**")
                .authorizeRequests()
                    .antMatchers("/api/public/**", "/api/register").anonymous() //if you need to allow some path in api
                    .antMatchers("/api/**", "/api/register/**").hasRole("API_USER")
                .and()
                    .formLogin()
                        .loginPage("/api/")
                        .failureHandler(failureHandler())
                        .loginProcessingUrl("/api/login")
                        .usernameParameter("username")
                        .passwordParameter("password")
                        .successHandler(successHandler())
                .and()
                    .logout()
                        .logoutUrl("/api/logout")
                        .logoutSuccessUrl("/api/")
                        .invalidateHttpSession(true)
                .and()
                    .rememberMe()
                        .key("something")
                .and()
                    .csrf().disable()
                .exceptionHandling()
                    .accessDeniedPage("/api/loginfailed");
        }
    }

    secondo percorso:

    @Configuration
    public class AuthSecurityConfiguration extends WebSecurityConfigurerAdapter{
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.antMatcher("/auth/**")
                .authorizeRequests()
                    .antMatchers("/auth/register").anonymous()
                    .antMatchers("/auth/**", "/auth/register/**").hasRole("USER")
                .and()
                    .formLogin()
                        .loginPage("/auth/")
                        .failureHandler(failureHandler())
                        .loginProcessingUrl("/auth/login")
                        .usernameParameter("username")
                        .passwordParameter("password")
                        .successHandler(successHandler())
                .and()
                    .logout()
                        .logoutUrl("/auth/logout")
                        .logoutSuccessUrl("/auth/")
                        .invalidateHttpSession(true)
                .and()
                    .rememberMe()
                        .key("something")
                .and()
                    .csrf().disable()
                .exceptionHandling()
                    .accessDeniedPage("/auth/loginfailed");
        }
    }

    ora, poiché non hai aggiunto la sicurezza per /actuator/health è possibile lasciare senza uno o si può fare un altro adattatore per esso e consentire l’accesso a tutti.

    inoltre si dovrebbe usare la protezione CSRF, è facile da implementare.

  3. @ShervinAsgari Se guardate nella documentazione troverete alcuni esempi con anyRequest(). devi mettere di fronte a voi il vostro ultimo and().

Leave a Reply

Your email address will not be published. Required fields are marked *