2012-05-06 1 views
6

Io uso molla di sicurezza per proteggere il mio web, quando sto imparando che entro la primavera-roo generati file di configurazione in applicationContext-security.xml, in <http> nodo:La sicurezza di primavera non può corrispondere al formato "? Parameter"?

<intercept-url pattern="/userses?form" access="hasRole('ROLE_ADMIN')" /> 

Significa che quando si desidera creare un oggetto Users, in primo luogo è necessario accedere per ottenere il permesso ADMIN. Ma in realtà non ha funzionato. Controllare il registro:? Utilizzare

2012-05-06 11:39:11,250 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/userses'; against '/userses?form' 

Il quadro le/userses invece di/userses forma da confrontare con, processo di autenticazione saltato come stringa non ha prodotto risultati. Per verificare questo cerco anche di un altro URL:

<intercept-url pattern="/userses/abc" access="hasRole('ROLE_ADMIN')" /> 

ho richiesto il userses/abc, ha rilevato utente non è autorizzato, e si è trasferito alla pagina// login, controllato il registro:

2012-05-06 11:46:44,343 [http-8088-7] DEBUG org.springframework.security.web.util.AntPathRequestMatcher - Checking match of request : '/uesrses/abc'; against '/userses/abc' 

Così la mia domanda è: non molla il supporto 3 "parametro" modello o mi sono perso qualcosa da configurare per supportare questo? PS: tutto il codice è generato da roo senza modifiche, chiedendosi anche perché non funziona.

risposta

6

Per impostazione predefinita, spring security utilizza la corrispondenza di stile ant, che non può corrispondere ai parametri. Regex corrispondenza, tuttavia, può partita su parametri

Prova definisce in questo modo:

<http request-matcher="regex"> 
    <security:intercept-url pattern="\A/userses\?form.*\Z" access="hasRole('ROLE_ADMIN')" /> 
</http> 

Non so perché Roo non lo fa automaticamente. Sembra che dovrebbe.

+0

Grazie per la risposta. Un'altra domanda penso che tu possa conoscere la risposta. Il metodo @Secure non ha funzionato per me. Ho aggiunto tag a applicationContext-security.xml e modificato pom.xml per soddisfare la dipendenza, sopra il metodo nel controller, ho aggiunto @Secured ("ROLE_ADMIN") ma non importa in quale ruolo tutti possono accedere al metodo, qualcosa di sbagliato? @Secured ("ROLE_ADMIN") @RequestMapping (value = "abc", metodo = RequestMethod.GET, produce = "text/html") public String create() { return Users.getString(); // myCreate (); } – JerryCai

+0

@JerryCai Forse dovresti aprire una nuova domanda. È difficile leggere il codice nei commenti e aiuterà gli altri con lo stesso problema se riescono a trovarlo come una domanda distinta su SO. –

+0

Ok, lo farò, grazie. – JerryCai

6

Questo comportamento è definito dal "request-matcher" in uso. Come indicato dalla documentazione, il valore predefinito è "ant", che indica di utilizzare uno AntPathRequestMatcher e un'alternativa è "regex", RegexRequestMatcher. I javadocs (linkati) forniscono informazioni specifiche sui matcher, incluso il fatto che il primo corrisponda al "servletPath + pathInfo" di una richiesta e il secondo al suo "servletPath + pathInfo + queryString".

+0

Cosa ha detto Tim: inizia una nuova domanda. Non provare a inserire una domanda in un commento. –

+0

Ok, lo farò, grazie. – JerryCai