2012-08-22 2 views
9

Ich benutze Feder mit Freemarker als Vorlage-Engine. Freemarker ermöglicht die Jsp Taglibs, für die Sicherheit zum Beispiel zu verwenden, durch Zugabe vonHinzufügen von Spring-Bibliothek für die Verwendung von JSP Taglibs für Sicherheit in Freemarker

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

zu den Vorlagen, was ich zum Beispiel

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

Aber Frühjahr/Freemarker können nicht die Taglibs finden verwenden können, Wenn sie nicht dem Klassenpfad hinzugefügt werden, fügte ich in meinem Projekt

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

zu meiner pom.xml hinzu.

Aber wie auch immer, die Tags konnten nicht gefunden werden! Ich musste die Spring-security-taglibs.jar in den WEB-INF/lib-Ordner für die gefundenen Tags einfügen.

Weiß jemand, warum das Glas explizit in den lib-Ordner hinzugefügt werden muss ?? Warum werden sie nicht von Kater gefunden, in meinem Fall?

BEARBEITEN @ddekany

Vielen Dank. Der Stacktrace ist die folgende, wenn die federsicherheits taglibs.jar nicht in das 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 
    ... 
kopiert
+0

Ich denke, Sie sollten die genaue Fehlermeldung in Ihre Frage aufnehmen. Außerdem glaube ich nicht, dass die JSP-Spezifikation darauf abzielt, nach den * taglibs * ('tld'-s) zu suchen, die den aktuellen (?) Klassenlader oder so, aber ich liege da vielleicht falsch. – ddekany

Antwort

0

Haben Sie umfassen die JspSupportServlet als here und here

angegeben

[EDIT] Nachdem ich Ihren Beitrag etwas vorsichtiger gelesen habe, empfehle ich Ihnen den Leseabschnitt "JSP.7.3.2" (und weiter) von JSP specification.

+0

Ja, ich habe das 'JspSupportServlet' wie vorgeschlagen hinzugefügt, aber der Fehler ist immer noch derselbe. Betrachtet man den Abschnitt "JSP.7.3.2" in der [JSP-Spezifikation] (http://jsp.java.net/spec/jsp-2_1-fr-spec.pdf), so ist der wesentliche Teil wohl der folgende: "Die TLD-Ressource Der Pfad wird relativ zum Stamm der Webanwendung interpretiert und sollte direkt in eine TLD-Datei oder in eine JAR-Datei mit einer TLD-Datei am Speicherort META-INF/taglib.tld aufgelöst werden. Ist dies die Antwort, warum tomcat die META-INF/* .tld-Datei nicht finden kann? Weil ich es über eine Abhängigkeit von Maven aufgenommen habe? – matthaeus

+0

Die META-INF/* .tld-Dateien werden aus den Jars geladen. Die JAR-Dateien müssen sich im Klassenpfad WEB-INF/lib befinden. Wenn es dort nicht gefunden wird, lädt kein J2EE-Container das tld. – tom

+0

Ok, das verstehe ich, aber warum reicht es nicht aus, die maven-Abhängigkeit der spring taglib-Bibliothek hinzuzufügen? Wie man in [this] sehen kann (http://doanduyhai.wordpress.com/2012/02/26/spring-security-part-v-security-tags/) und [dies] (http: //static.springsource .org/spring-security/site/petclinic-tutorial.html) Beispiele? – matthaeus

7

Falls jemand anderes in diese läuft ...

Sie müssen die Feder Support-Dateien hinzufügen, wie hier beschrieben (nur schneiden einige & Paste) http://static.springsource.org/spring-webflow/docs/2.2.x/reference/html/ch13s09.html.

Und dann einige Abhängigkeiten hinzu:

<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> 

Sie alles andere Arbeits Unter der Annahme haben, sollten Sie jetzt in der Lage sein, die taglib zu Ihren Seiten hinzuzufügen. Zum Beispiel:

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

< sec: autorisieren ifAllGranted = "USER_ROLE">
Hallo Benutzer
</sec: autorisieren >

* hatte einen Raum b/f 's' es

+0

Die letzte Version von Spring, die 'Spring-faces' hat, war 2.4.1. – Raedwald

2

verwenden Maven Abhängigkeit schreiben hinzuzufügen:

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

org.springframework und org.springframework.security sind unterschiedliche Frameworks mit unterschiedlichen Versionsnummern.

Verwandte Themen