Ho appena annunciato il nuovo corso Learn Spring Security, incluso il materiale completo incentrato sul nuovo stack OAuth2 in Spring Security 5:
>> SCOPRI IL CORSO1. Il problema
Questo articolo discuterà uno dei problemi di configurazione più comuni in Spring: non è stato trovato un gestore dello spazio dei nomi per uno degli spazi dei nomi di Spring . Il più delle volte, questo significa che un particolare vaso Spring manca dal classpath, quindi esaminiamo quali potrebbero essere questi schemi mancanti e qual è la dipendenza mancante per ciascuno di essi.
2. //www.springframework.org/schema/security
Lo spazio dei nomi di sicurezza non disponibile è di gran lunga il problema più ampiamente riscontrato nella pratica:
Il che porta alla seguente eccezione:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [//www.springframework.org/schema/security] Offending resource: class path resource [securityConfig.xml]
La soluzione è semplice: la dipendenza spring-security-config manca dal classpath del progetto:
org.springframework.security spring-security-config 3.2.5.RELEASE
Questo metterà il gestore dello spazio dei nomi corretto, in questo caso SecurityNamespaceHandler , sul classpath e sarà pronto per analizzare gli elementi nello spazio dei nomi di sicurezza .
La configurazione completa di Maven per una configurazione completa di Spring Security può essere trovata nel mio precedente tutorial di Maven.
3. //www.springframework.org/schema/aop
Lo stesso problema si verifica quando si utilizza lo spazio dei nomi aop senza avere la libreria aop spring necessaria sul classpath:
L'eccezione esatta:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [//www.springframework.org/schema/aop] Offending resource: ServletContext resource [/WEB-INF/webConfig.xml]
La soluzione è simile: il barattolo spring-aop deve essere aggiunto al classpath del progetto:
org.springframework spring-aop 4.1.0.RELEASE
In questo caso, AopNamespaceHandler sarà presente nel classpath dopo aver aggiunto la nuova dipendenza.
4. //www.springframework.org/schema/tx
Utilizzo dello spazio dei nomi delle transazioni : uno spazio dei nomi piccolo ma molto utile per la configurazione della semantica transazionale:
risulterà anche in un'eccezione se il jar giusto non è sul classpath:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [//www.springframework.org/schema/tx] Offending resource: class path resource [daoConfig.xml]
La dipendenza mancante qui è spring-tx :
org.springframework spring-tx 4.1.0.RELEASE
Ora, il NamspaceHandler corretto , ovvero TxNamespaceHandler , sarà presente sul classpath consentendo la gestione dichiarativa delle transazioni con XML e annotazioni.
5. //www.springframework.org/schema/mvc
Spostare in avanti per il MVC spazio dei nomi :
La dipendenza mancante porterà alla seguente eccezione:
org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [//www.springframework.org/schema/mvc] Offending resource: class path resource [webConfig.xml]
In questo caso, la dipendenza mancante è spring-mvc :
org.springframework spring-webmvc 4.1.0.RELEASE
L'aggiunta di questo a pom.xml aggiungerà MvcNamespaceHandler al classpath, consentendo al progetto di configurare la semantica MVC utilizzando lo spazio dei nomi.
6. Conclusione
Infine, se stai utilizzando Eclipse per gestire il server web e distribuire, assicurati che la sezione Deployment Assembly del progetto sia configurata correttamente - vale a dire che le dipendenze Maven siano effettivamente incluse nel classpath al momento della distribuzione.
Questa esercitazione ha discusso i soliti sospetti per il problema "Impossibile individuare Spring NamespaceHandler per lo spazio dei nomi dello schema XML" e ha fornito soluzioni per ogni occorrenza.
Fondo di sicurezza