2014-07-25 34 views
5

Sono un po 'confuso con il pattern URL in spring security. Perché, nella sicurezza http del nucleo servlet, i modelli di URL / e /* vengono utilizzati per specificare una o più directory. / è utilizzato per una directory e /* è utilizzato da molte directory. Ma nella sicurezza di primavera viene anche introdotto lo /**, qual è lo scopo principale del modello di URL /** in sicurezza.Spring Security: Differenza tra/** e/* url pattern in Spring-Security

risposta

4

Secondo la documentazione Primavera di sicurezza lo scopo principale di /** è quello di catch-tutti i caratteri jolly:

In pratica si consiglia di utilizzare la sicurezza metodo al vostro livello di servizio, per controllare l'accesso alla vostra applicazione , e non fare interamente affidamento sull'uso dei vincoli di sicurezza definiti a livello di applicazione web. Gli URL cambiano ed è difficile tenere conto di tutti gli URL possibili che un'applicazione potrebbe supportare e come le richieste potrebbero essere manipolate. Dovresti provare a limitarti a utilizzare alcuni semplici percorsi di formica che sono semplici da comprendere. Cerca sempre di utilizzare un approccio "deny-by-default" in cui hai un carattere jolly catch-all (/ ** o **) definito ultimo e negando l'accesso.

Inoltre non bisogna dimenticare che

I modelli sono sempre valutate nell'ordine in cui sono definiti. Pertanto è importante che i modelli più specifici siano definiti più in alto nell'elenco rispetto a modelli meno specifici.

Così si può avere qualcosa di simile:

<security:http pattern="/rest-service/**" authentication-manager-ref="authenticationManager" auto-config="false" access-decision-manager-ref="accessDecisionManager"> 
    <security:intercept-url pattern="/rest-service/report/export/xml" access="AUTH_REPORT_EXPORTXML" />   
    <security:intercept-url pattern="/**" access="AUTH_SYSTEM_LOGIN" /> 
    <security:http-basic /> 
</security:http> 

che significa che per tutte le richieste avremo bisogno di autorità AUTH_SYSTEM_LOGIN, ma in particolare per i/resto servizio/rapporto/export/xml l'utente dovrà AUTH_REPORT_EXPORTXML anche perché è definito sopra. Come dicono anche che è meglio non contare solo su questo vincoli di sicurezza che significa che è bene anche duplicare quelle in metodi di servizio con annotazione assicurato in questo modo:

@Secured("AUTH_REPORT_EXPORTXML") 

In generale mi pare di capire non v'è alcuna differenza tra /* e /** eccetto che l'ultimo cattura tutti i caratteri jolly.

9

La differenza tra/* &/** è che il secondo corrisponde all'intero albero delle directory, comprese le sottodirectory, dove come * corrisponde solo al livello in cui è specificato in.

0
@Override 
    protected void configure(HttpSecurity http) throws Exception { 
    // ... 
    .antMatchers(HttpMethod.GET, "/**").permitAll 
    .antMatchers(HttpMethod.POST, "/*").permitAll 
    // ... 
} 

In questa configurazione qualsiasi "Get" sarà consentito di richiesta, ad esempio:

  • /libro
  • /libro/20
  • /libro/20/autore

Quindi, tutti questi URL corrispondono al testo con il modello "/ **".

URL permessi per "Messaggio":

  • /libro
  • /rivista

Urls sopra match con "/ *"

Problemi correlati