2012-08-22 5 views
9

Sto usando spring con freemarker come motore di template. Freemarker permette di utilizzare il Jsp Taglibs, per la sicurezza, ad esempio, con l'aggiunta diAggiunta di una libreria Spring per l'utilizzo di Taglibs JSP per la sicurezza in Freemarker

<#assign security=JspTaglibs["http://www.springframework.org/security/tags"] /> 

ai modelli, quello che mi permette di utilizzare per esempio

<@security.authorize ifNotGranted="ROLE_ADMIN"> 
     whatever 
    </@security.authorize> 

Ma, Primavera/Freemarker non riesco a trovare le taglibs, a meno che non vengano aggiunti al classpath, quindi ho aggiunto

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

al mio pom.xml nel mio progetto.

Ma in ogni caso, i tag non sono stati trovati! Ho dovuto aggiungere spring- security-taglibs.jar nella cartella WEB-INF/lib per trovare i tag.

Qualcuno sa perché il barattolo deve essere aggiunto esplicitamente nella cartella lib ?? Perché non sono stati trovati da Tomcat, nel mio caso?

EDIT @ddekany

Grazie. Lo StackTrace è il seguente, se la primavera-security-taglibs.jar non viene copiato nella directory WEB-INF/lib

No mapping defined for http://www.springframework.org/security/tags 
    The problematic instruction: ---------- ==> assignment: 
      security=JspTaglibs["http://www.springframework.org/security/tags"] 
      [on line 12, column 1 in home.ftl] in user-directive content.main 
      [on line 8, column 9 in home.ftl] in user-directive layout.global 
      [on line 2, column 1 in home.ftl] 
    ---------- Java backtrace for programmers: ----------  
    freemarker.template.TemplateModelException: 
      No mapping defined for http://www.springframework.org/security/tags at   
    freemarker.ext.jsp.TaglibFactory.get(TaglibFactory.java:180) at 
    ... 
+0

Penso che dovresti includere l'esatto messaggio di errore nella tua domanda. Inoltre, non penso che la specifica JSP sembri che cerca i * taglibs * ('tld'-s) usando la corrente (?) caricatore di classi o simili, ma forse mi sbaglio. – ddekany

risposta

0

Hai incluso il JspSupportServlet come dichiarato here e here

[EDIT] Dopo aver letto un po 'più attentamente il tuo post, ti consiglio di leggere la sezione "JSP.7.3.2" (e successivi) da JSP specification.

+0

Sì, ho aggiunto il 'JspSupportServlet' come proposto, ma l'errore è sempre lo stesso. Guardando la sezione "JSP.7.3.2" in [specifica JSP] (http://jsp.java.net/spec/jsp-2_1-fr-spec.pdf) la parte essenziale immagino sia questa: "La risorsa TLD il percorso viene interpretato in relazione alla radice dell'applicazione Web e deve essere risolto direttamente in un file TLD oppure in un file JAR con un file TLD nella posizione META-INF/taglib.tld ". È questa la risposta perché Tomcat non riesce a trovare il file META-INF/*. Tld? Perché l'ho incluso tramite una dipendenza di esperti? – matthaeus

+0

I file META-INF/*. Tld vengono caricati da jar. I file jar devono trovarsi nel classpath che è WEB-INF/lib. Se non viene trovato, nessun contenitore J2EE caricherà il tld. – tom

+0

Ok, lo capisco, ma perché non è sufficiente aggiungere la dipendenza Maven alla libreria taglib di primavera? Come può essere visto in [this] (http://doanduyhai.wordpress.com/2012/02/26/spring-security-part-v-security-tags/) e [this] (http: //static.springsource .org/spring-security/site/petclinic-tutorial.html) esempi? – matthaeus

7

Nel caso in cui nessun altro si imbatte in questo ...

È necessario aggiungere i file di supporto a molla, come descritto qui (solo qualche taglio & incolla) http://static.springsource.org/spring-webflow/docs/2.2.x/reference/html/ch13s09.html.

e quindi aggiungere alcune dipendenze:

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-taglibs</artifactId> 
    <version>2.0.0</version> 
</dependency> 
<dependency> 
    <groupId>org.springframework.webflow</groupId> 
    <artifactId>spring-faces</artifactId> 
    <version>2.3.1.RELEASE</version> 
</dependency> 

Supponendo di avere tutto il resto di lavoro, si dovrebbe ora essere in grado di aggiungere la taglib alle tue pagine. Per esempio:

xmlns: sec = "http://www.springframework.org/security/tags"

< sec: autorizzare ifAllGranted = user "USER_ROLE">
Ciao
</sec: autorizzare >

* dovuto aggiungere uno spazio b/f 'sec' di pubblicarlo

+0

L'ultima versione di Spring con 'spring-faces' era 2.4.1. – Raedwald

2

Utilizzare questa dipendenza Maven:

<dependency> 
    <groupId>org.springframework.security</groupId> 
    <artifactId>spring-security-taglibs</artifactId> 
    <version>3.2.5.RELEASE</version> 
</dependency> 

org.springframework e org.springframework.security sono quadri diversi con numeri di versione diversi.

Problemi correlati