2012-08-01 15 views
5

Vorrei creare regole di sicurezza basate su parametri URL personalizzati (variabili di percorso). Nell'esempio. Diciamo che voglio avere un utente che abbia accesso amministratore per le risorse chiamate Brand1 e Brand2 ma non ha accesso alla risorsa chiamata Brand3. Possiamo modificare le risorse usando i seguenti link.Spring Security con parametri variabili di percorso

http://myapp/brand/edit/1 
http://myapp/brand/edit/2 
http://myapp/brand/edit/3 

ora nel contesto di protezione mi piacerebbe fare qualcosa di simile

<security:intercept-url pattern="/brand/edit/{brandId}" 
      access="hasRole('ROLE_ADMIN') or 
        @authorizationService.hasBrandPermission(
        #brandId, principal.username)"/> 

L'unica cosa che ottiene è nome utente. BrandId è sempre nullo. L'ho usato con @PreAuthorize e ha funzionato, ma ora mi piacerebbe configurare la sicurezza centralizzata in un singolo file xml anziché distribuirlo su tutte le classi di controller. Inoltre, mentre stavo usando @PreAuthorize il mio access-negato-handler non mi ha reindirizzato nella pagina negata ma visualizza brutto AccessDeniedException insead.

Sarei davvero all'altezza delle idee.

+0

Non capisco il problema. È che il BrandId è sempre nullo? O è che non protegge la risorsa? O è la brutta pagina AccessDeniedException? –

+0

BrandID è nullo –

risposta

1

puoi provare a usare espressioni regolari.

è necessario aggiungere l'attributo path-type = "regex" nel vostro elemento http o richiesta-matcher = "regex" se la vostra utilizzando la sicurezza di primavera 3.1

vedere la documentazione per maggiori dettagli

+0

Mi sembra che regexp sia solo per la definizione dei pattern url non per la variabile path referencing. cioè posso fare qualcosa del genere "/path/to/*.html" in modo da applicare tutti gli URL che corrispondono al modello ma ciò che mi interessa è "/ percorso/a/risorsa/{resourceId}" e ottenere valore resourceId in ' accesso 'section so ie access = "@ myService.mySecurityMethod (#resourceId)" –

1

cambiare la versione Primavera di sicurezza nel vostro pom.xml-4.1.0.RELEASE:

<spring-security.version>4.1.0.RELEASE</spring-security.version> 

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-web</artifactId> 
    <version>${spring-security.version}</version> 
</dependency> 

potrebbe essere necessario pulire il tuo progetto di maven dopo quello

(lo so, è una vecchia domanda, tuttavia, ho affrontato lo stesso problema 3 anni dopo).

+0

Com'è collegato alla domanda? – tunix

Problemi correlati