2011-09-08 5 views
12

rinvio Primavera di sicurezza:Utilizzo di Spring Security, come posso utilizzare i metodi HTTP (ad esempio GET, PUT, POST) per distinguere la sicurezza per determinati pattern URL?

È possibile utilizzare più elementi per definire diverse esigenze di accesso per i diversi gruppi di URL, ma saranno valutato nell'ordine elencato e verrà utilizzata la prima corrispondenza. Quindi tu devi mettere le corrispondenze più specifiche in alto. È anche possibile aggiungere un attributo del metodo per limitare la corrispondenza a un particolare metodo HTTP (GET, POST, PUT ecc.). Se una richiesta corrisponde a più schemi, la corrispondenza specifica del metodo avrà la precedenza indipendentemente dall'ordinazione.

Come configurare Spring Security in modo che l'accesso a determinati pattern URL sia protetto in modo diverso a seconda del metodo HTTP utilizzato per accedere al pattern URL?

risposta

25

Si tratta solo di configurazione. Si dice che gli <intercept-url> elementi saranno valutati da cima a fondo nella vostra <http /> tag del file di configurazione:

<http auto-config="true"> 
    <intercept-url pattern="/**" access="isAuthenticated" /> 
    <intercept-url pattern="/login.jsp" access="permitAll" /> 
</http> 

Nell'esempio di cui sopra, stiamo cercando di consentire agli utenti autenticati solo accedere a tutto, tranne, naturalmente , la pagina di accesso (l'utente deve prima accedere, giusto ?!). Ma questo, secondo la documentazione, non funzionerà, perché la corrispondenza meno specifica è in cima. Così, (uno dei) la giusta configurazione per raggiungere l'obiettivo di questo esempio è:

<http auto-config="true"> 
    <intercept-url pattern="/login.jsp" access="permitAll" /> 
    <intercept-url pattern="/**" access="isAuthenticated" /> 
</http> 

Posizionamento della corrispondenza più specifica sulla parte superiore.

L'ultima cosa che la citazione dice riguarda il metodo HTTP. Si può usare per specificare la partita, in modo da:

<http auto-config="true"> 
    <intercept-url pattern="/client/edit" access="isAuthenticated" method="GET" /> 
    <intercept-url pattern="/client/edit" access="hasRole('EDITOR')" method="POST" /> 
</http> 

In questo secondo esempio, per accedere /client/edit tramite ottenere l'utente ha solo bisogno di essere autenticato, ma per accedere /client/edit tramite POST (diciamo, presentando il modulo di modifica) l'utente deve avere il ruolo EDITOR. Questo modello di URL potrebbe non essere incoraggiato in alcuni punti, ma è stato solo un esempio.

4

Per coloro che preferiscono la configurazione basata su annotazione Java, rilasciare questa classe nell'applicazione.

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().antMatchers(HttpMethod.GET).permitAll(); 
     http.authorizeRequests().antMatchers(HttpMethod.POST).denyAll(); 
     http.authorizeRequests().antMatchers(HttpMethod.DELETE,"/you/can/alsoSpecifyAPath").denyAll(); 
     http.authorizeRequests().antMatchers(HttpMethod.PATCH,"/path/is/Case/Insensitive").denyAll(); 
     http.authorizeRequests().antMatchers(HttpMethod.PUT,"/and/can/haveWildcards/*").denyAll(); 

    } 

} 

Utilizzando le seguenti dipendenze Maven (versioni precedenti di Primavera-Security dovrebbe funzionare anche):

<dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>5.0.0.M3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>5.0.0.M3</version> 
    </dependency> 
Problemi correlati