6

Probabilmente sto facendo qualcosa di sbagliato qui, proprio non riesco a capire cosa ...Come riattivare l'accesso anonimo all'endpoint di avvio di Spring Boot?

Ho un server di autenticazione Oauth2 e un server di risorse all'interno della stessa applicazione. configurazione del server

risorse: configurazione del server

@Configuration 
@EnableResourceServer 
@EnableGlobalMethodSecurity(prePostEnabled = true) 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER-1) 
public class ResourceServerConfig extends ResourceServerConfigurerAdapter { 
    public static final String RESOURCE_ID = "resources"; 

    @Override 
    public void configure(final ResourceServerSecurityConfigurer resources) { 
     resources 
       .resourceId(RESOURCE_ID); 
    } 

    @Override 
    public void configure(final HttpSecurity http) throws Exception { 
     http 
       .authorizeRequests() 
       .antMatchers(HttpMethod.GET, "/**").access("#oauth2.hasScope('read')") 
       .antMatchers(HttpMethod.POST, "/**").access("#oauth2.hasScope('write')") 
       .antMatchers(HttpMethod.PUT, "/**").access("#oauth2.hasScope('write')") 
       .antMatchers(HttpMethod.PATCH, "/**").access("#oauth2.hasScope('write')") 
       .antMatchers(HttpMethod.DELETE, "/**").access("#oauth2.hasScope('write')") 
       .antMatchers(HttpMethod.OPTIONS, "/**").permitAll() 
       .antMatchers(HttpMethod.GET, "/health").permitAll(); 
    } 

} 

Autenticazione:

@Configuration 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private UserDetailsService userDetailsService; 

    @Override 
    public void configure(final AuthenticationManagerBuilder auth) throws Exception { 
     auth 
       .userDetailsService(userDetailsService) 
       .passwordEncoder(new BCryptPasswordEncoder()); 
    } 

    @Override 
    protected void configure(final HttpSecurity http) throws Exception { 
     http 
       .authorizeRequests() 
       .anyRequest().authenticated() 
       .and().httpBasic().realmName("OAuth Server"); 
    } 
} 

Quando provo ad accedere/salute, ho avuto un HTTP/1.1 401 non autorizzato.

Come posso convincere Spring Boot a rendere/la salute accessibile in modo anonimo?

+0

In SecurityConfig penso che manchi di aggiungere: .antMatchers (HttpMethod.GET, "/ health"). PermitAll(); – mherbert

+1

L'ordine in cui vengono specificati i mapping è anche l'ordine in cui vengono consultati. La prima partita vince ... Poiché '/ **' corrisponde a tutto ciò che la tua mappatura '/ health' è inutile. Sposta quello sopra i mapping '/ **' per farlo funzionare. –

+0

@ M.Deinum Grazie, questo ha risolto il problema. Se aggiungi questa risposta come risposta, sono felice di accettarla. – endrec

risposta

1

Come M. Deinum detto:

L'ordine in cui si specificano le mappature è anche l'ordine in cui sono consultati. La prima partita vince ... As/** corrisponde a tutto il tuo/health mapping è inutile. Spostalo sopra i mapping/** per farlo funzionare. - M. Deinum 20 agosto alle 17:56