2014-10-15 1 views
8

Sto sviluppando server API restful utilizzando l'avvio a molla. Ho configurato il mio progetto per utilizzare l'autenticazione di base come di seguito.Come fare in modo che l'avvio a molla non emetta mai un cookie di sessione?

@ComponentScan 
@EnableAutoConfiguration 
@EnableWebSecurity 
@Configuration 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 
    ... 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and() 
      .csrf().disable() 
      .authorizeRequests().anyRequest().hasRole("USER").and() 
      .httpBasic(); 
    } 
    ... 
} 

Ma quando ho provato l'API da Chrome-Postman-Plugin, dopo la prima chiamata, il server non richiedono credenziali utente. E ho notato che il cookie 'JSESSIONID' è stato creato.

Non ci sono altre configurazioni di sicurezza nel mio progetto. Mi chiedo perché questo accada ...

+0

La classe di configurazione estende WebSecurityConfigurerAdapter? – Modi

+0

Sì. Ho modificato il mio snippet di codice. Voglio assicurarmi che il mio server API non gestisca alcuna sessione .. – jyshin

+0

OK, per prima cosa, verifica che l'autenticazione sia applicata. Si può provare a sostituire la configurazione con questo:. Http.csrf() \t \t \t \t .disable() \t \t \t \t .authorizeRequests() \t \t \t \t .anyRequest() autenticati() – Modi

risposta

10

Hai provato a utilizzare SessionCreationPolicy.STATELESS. C'è una sottile differenza tra STATELESS e NEVER nel spring docs:

STATELESS: Primavera di sicurezza non potrà mai creare un HttpSession e non sarà mai utilizzato per ottenere il SecurityContext.

NEVER: Primavera di sicurezza non potrà mai creare un HttpSession, ma utilizzerà il HttpSession se esiste già.

Quindi vorrei suggerire di cancellare tutti i cookie, passare a STATELESS e riprovare. Potrebbe essere che avevi già un HttpSession quando passavi a NEVER.

+0

Complimenti per l'avviso di l'ambiguità. – pyb